我正在努力使每天订购量最多的城市。当存在多个按列分组时,我对聚合函数的工作方式有些困惑。
假设存在一个带有列的表 Trips :
*订单ID(唯一)
*城市
*日期
数据就像leetcode sample中的问题
我想找到每天订购量最多的城市。
select
date,
city,
count(*) as city_cnt
from trips a
group by date, city
having count(*) = (select max(count(*))
from trips b
where b.date = a.date
group by b.city)
此代码可以获得预期的结果,但我认为可能会有更好的解决方案。
问题1 :还有其他方法可以得到结果吗?
问题2 :首先,我尝试在不带“ HAVING”子句的第一个“ SELECT”子句中使用max(count(*))。出现错误“不是单组分组功能”:
select
date,
city,
max(count(*)) as max_city_cnt
from trips a
group by date, city
我认为count(*)可以计算每个城市的每日订单数量,使用max()函数可以获得每天最大的订单数量。但这是行不通的。有人可以解释吗?
问题3 :我也不清楚窗口函数中的“分区依据”和“分组依据”之间的关系;
select
date,
city,
count(id) city_cnt,
rank() over (partition by date order by count(id) desc) d_rank
from trips
group by date, city
;
对于窗口功能中的代码 :
rank() over (partition by date order by count(id) desc) d_rank
谢谢!
答案 0 :(得分:3)
您使用QTableWidgetItem::setText
的版本可能是最不详尽且性能最高的版本。但是,您需要一个子查询来将每个城市/日期组限制为具有最高计数的记录:
QTableWidget::setCellWidget()
上述CTE在同一天为每个城市组分配一个等级序列。然后,我们只限制每天计数最高的城市。请注意,QTableWidget::timerEvent
(和RANK
)允许平局,因此,如果某天有多个城市并列第一名,则计数最高,上述查询就会开始。 / p>