繁体   English   中英

有没有办法在SQL中返回列的最大值?

[英]Is there a way to return the max value of column in SQL?

如果我有一张桌子...

name | day | showers
-----|-----|--------
John | mon | 1
John | tue | 2
John | wed | 1
Pete | fri | 3

我想返回每个人一天淋浴最多的桌子......

name | day | showers
-----|-----|--------
John | tue | 2
Pete | fri | 3

我该怎么做?

我以为我可以做...

SELECT name, day FROM table GROUP BY name WHERE showers=max(showers)

但由于 day 不在 group by 子句中,我收到语法错误

distinct on使用distinct on

select distinct on (name) t.*
from t
order by name, showers desc;

这将只返回每个名称的一行。 如果你想要重复,如果有关系,那么使用rank()dense_rank()

select t.*
from (select t.*,
             rank() over (partition by name order by showers desc) as seqnum
      from t
     ) t
where seqnum = 1;

您可以使用uncorrelated subquery 这也将保持联系

select *
from t 
where (name, showers) in (select name, max(showers)
                          from t
                          group by name);

也可以表示为correlated subquery

select *
from t t1
where showers= (select max(t2.showers)
                from t t2
                where t1.name=t2.name);

您可以使用此查询:

SELECT name, days, showers
FROM test
WHERE showers =
(SELECT max(showers) FROM test i WHERE i.name = test.name)

相关子查询是读取表中每一行并将每行中的值与相关数据进行比较的一种方式。 每当子查询必须为主查询考虑的每个候选行返回不同的结果或结果集时,就会使用它。 换句话说,您可以使用相关子查询来回答多部分问题,该问题的答案取决于父语句处理的每一行中的值。

所以从原始表 你得到这个结果

所以从左边的原始表,通过运行这个查询,你会在右边的表中得到结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM