[英]Get max value per day with the corresponding name
我有下表:
天 | 姓名 | 值 |
---|---|---|
2021 年 12 月 1 日 | 恩 | 1 |
2021 年 11 月 1 日 | 彧 | 12 |
2021 年 12 月 1 日 | 干 | 0 |
2021 年 12 月 1 日 | 彧 | 1 |
2021 年 11 月 1 日 | 干 | 19 |
2021 年 11 月 1 日 | 恩 | 11 |
现在我想获取每天的最大val
,包括相应val
的名称。 我怎样才能得到这个? 我得到了以下查询:
select max(val), day
from table t
group by day;
但是,我希望结果包含相应的名称。 我的第一个想法是在查询中包含name
:
select name, max(val), day
from table t
group by day;
问题是 Postgres 希望我也按名称分组,这再次导致上表(以不同的行顺序)。
在 上使用distinct on
:
select distinct on (day) t.*
from t
order by day, val desc;
您还可以使用 WINDOW function,以避免 DISTINCT ON 并在其他品牌的数据库上工作。 row_number() 和 ORDER BY 可以解决问题:
WITH i AS (
SELECT
name
, val
, day
, row_number() OVER(PARTITION BY name ORDER BY val DESC, day)
FROM table t
)
SELECT name
, val
, day
FROM i
WHERE row_number = 1; -- one result for every name, the first one
你试试下面的 sql。
WITH max_val AS (
SELECT MAX(val) AS max_val
,day
FROM TABLE t
GROUP BY day
)
SELECT max_val.max_val
,t.name
,t.day
FROM TABLE t
INNER JOIN max_val
ON t.day = max_val.day
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.