在SQL中,如何查询某一字段中最大值的数据

等等,昨天在咖啡馆碰到个事。
隔壁桌俩人抢着买单,最后愣是比谁手里的硬币多,谁硬币多谁就付。
你说这多累啊。
回到电脑前,刚才查数据库的时候,突然想到,这跟查最大值是不是有点像。

你看这表test_max2 ,就五行数据。
第三步用select 从表里把所有数据都捞出来了,发现score最大的是1 00。
第四步那个with row_number() over(order by score desc) 就像把那五个人按硬币数量从多到少排了队,然后直接选了第一名,就是score为1 00那条记录。

这步其实可以更简单点,比如直接用where score = (select max(score) from test_max2 )。
你看,有时候绕个弯子,结果一样,但哪个更顺手,得看情况。
比如这表要是再大点呢?

SQL最大最小值怎么查询 SQL最大值最小值查询技巧

MAX()和MIN()查极值,直接用。
COALESCE()处理NULL,数据变,慎用。
GROUPBY找分组极值,报表好帮手。
子查询找极值行,多值全要。
ORDERBY+LIMIT找极值,大数据快。
EXPLAIN选最优,自己掂量。

在sql中,如何查询某一字段中最大值的数据?

哎,你说的这个SQL查询,我以前也搞过。
确实,找最大值的数据,用子查询或者JOIN都行。

我之前在一家电商公司,搞一个报表,得找出用户下单时间最早的那条订单记录。
那天我用的就是子查询,写起来简单,代码看着也干净。
就是那句 select from orders where order_date = (select max(order_date) from orders),直接把子查询结果用等于号连上,效率也还行,表不大的时候。
当时领导看了一眼,说不错,就是子查询,有时候会慢点,但写起来方便。

后来有一次,表数据大了,几百万条。
我又用子查询搞了一次,发现查询时间明显变长了,卡了半天。
我就琢磨,换JOIN试试。
就照你说的,先搞个临时表(其实用子查询别名就行),select max(order_date) as latest_date from orders,然后跟原表 left join 起来,on orders.order_date = latest_date。
最后加个 where latest_date is not null 过滤掉那些空的。
这次查询速度快多了!所以啊,表数据大了,JOIN可能更稳当。

不过啊,这两种方法,你非要说哪个绝对好,还真不好说。
得看你的数据量,看你那个字段是不是经常要这么查。
有时候JOIN可能写起来绕点,但性能上占优。
子查询简单,写完一检查,没问题就行。
我以前带个小徒弟,就喜欢用子查询,说习惯了,看啥都子查询。
我给他讲了几次JOIN,开始还懵,后来用多了,感觉也挺好的。

总之,你这两种方法都靠谱,看情况用。
简单场景子查询挺好,复杂点或者大数据量,JOIN可能更合适。

sql如何查询某列最大值的行号

直接用窗口函数。

sql select id from tablea where num = ( select max(num) from tablea where name = a.name )
子查询加条件过滤。

效率低。