【发布时间】:2017-03-12 21:22:09
【问题描述】:
我正在尝试找到一种方法来为表中的每个用户选择具有最高值的行。除非我有误解,否则我不能简单地按每一行分组
例如,假设我目前有这样的查询:
select u.userid, p.region, count(u.userid) count
from userTable u join purchasesTable p on u.userid = p.userid
group by (u.userid, p.region)
它目前给出的结果是这样的:
id Region COUNT
---------- ----------- ----------
1 East 1
2 West 1
3 North 1
1 North 2
2 East 3
3 West 4
我想过滤结果以显示每个用户购买次数最多的区域(而不是总体购买次数最多的区域或用户)。
id Region COUNT
---------- ----------- ----------
1 North 2
2 East 3
3 West 4
我不能让 group by 子句只包含用户 ID,因为我想包含区域。但我不希望将区域列考虑到决策中。我考虑过将它包装在另一个查询中,然后取最大值,但我没有用这种方法取得任何成功。我也考虑过使用 distinct 关键字,但这也不能解决这个问题。
如果有人能指出我正确的方向,我将不胜感激。
【问题讨论】:
-
如果有两个区域并列同一个 id 的最高计数怎么办?您需要返回所有这些行,还是只返回其中之一 - 如果“只有一个”,是哪一个?例如,假设对于一个新的 id,比如
id=4,最高计数是 4,这个计数 4 与East和North相同。id=4的输出应该显示什么?
标签: sql oracle greatest-n-per-group