有没有一种方法可以通过多个分组找到最高价值

时间:2020-04-13 23:35:17

标签: sql postgresql group-by max greatest-n-per-group

我试图找到将两列组合在一起的最大值。 我试图找到一个月中一天中最繁忙的时间。

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);

这给了我一个错误,指出子查询只能在其中带回一列。

任何帮助将不胜感激

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

在给定一个月的时间里,我试图找到一天中最忙的时间。

如果您想要每天最繁忙的时间,请使用窗口功能:

secret