有没有办法通过多个分组找到最高价值
Posted
技术标签:
【中文标题】有没有办法通过多个分组找到最高价值【英文标题】:Is there a way finding highest value by more than one grouping 【发布时间】:2020-07-26 15:16:19 【问题描述】:我试图找到将两列组合在一起的最大值。 给定一个月,我试图找到一天中最忙的时间。
SELECT
date_part('day', tpep_pickup_datetime) AS trip_day,
date_part('hour', tpep_pickup_datetime) AS trip_hour,
count(*) AS numbers
FROM nyc_yellow_2019_01
GROUP BY trip_day, trip_hour
ORDER BY trip_day, count(*) desc)
这列出了每天的所有时间,但我只想要每天的前一小时。
我还尝试创建一个视图表,并据此写道:
SELECT DISTINCT(trip_day) MAX(numbers)
FROM busy_hour
GROUP BY trip_day;
很接近但不会告诉我确切的时间。
最后我在最后一个查询中尝试了 where 子句:
SELECT trip_hour
FROM busy_hour
WHERE
(SELECT DISTINCT(trip_day) MAX(numbers)
FROM busy_hour
GROUP BY trip_day);
这给了我一个错误,说明子查询只能带回一列。
任何帮助将不胜感激
【问题讨论】:
编辑您的问题并显示您想要的结果。并标记您正在使用的数据库。 请用您正在使用的数据库标记您的问题。这是 Postgres 吗? 【参考方案1】:您似乎正在使用 Postgres,正如 date_part()
的使用所表明的那样。
如果是这样,你可以使用distinct on
:
select distinct on (trip_day)
date_part('day', tpep_pickup_datetime) as trip_day,
date_part('hour', tpep_pickup_datetime) as trip_hour,
count(*) as numbers
from nyc_yellow_2019_01
group by trip_day, trip_hour
order by trip_day, numbers desc
【讨论】:
【参考方案2】:我试图找出一个月中一天中最忙的时间。
如果您想要每天最忙的时间,请使用窗口函数:
SELECT th.*
FROM (SELECT date_part('day', tpep_pickup_datetime) AS trip_day,
date_part('hour', tpep_pickup_datetime) AS trip_hour,
count(*) AS numbers,
row_number() over (partition by date_part('day', tpep_pickup_datetime) order by count(*) desc) as seqnum
FROM nyc_yellow_2019_01
GROUP BY trip_day, trip_hour
) th
WHERE seqnum = 1;
【讨论】:
以上是关于有没有办法通过多个分组找到最高价值的主要内容,如果未能解决你的问题,请参考以下文章