使用 group by 打印表中的最大值
Posted
技术标签:
【中文标题】使用 group by 打印表中的最大值【英文标题】:Printing the highest value in a table using group by 【发布时间】:2021-12-29 20:04:37 【问题描述】:首先,抱歉标题混乱,我不知道如何更好地描述它,它很复杂。
我有一张如下所示的表格:
send_org | rec_org | partecipants |
---|---|---|
a | b | 1 |
a | c | 2 |
b | d | 2 |
b | c | 3 |
b | f | 3 |
等等。
对于每个发送,我要打印的是具有最高参与者数的行(我不关心重复,我只需要一个编号最高的行);所以,在这种情况下,我期待像
a c 2
b c 3
使用 mysql,我的查询将是
SELECT send_org, receive_org, partecipants
FROM (
SELECT *
FROM tab
ORDER BY partecipants DESC) p
GROUP BY send_org;
它有效。
Hive 给了我关于不在 GROUP BY 语句中的键的错误,所以我尝试切换到 collection_set(),类似这样
SELECT send_org, collect_set(receive_org)[0], max(partecipants) partecipants
FROM tab
GROUP BY send_org
ORDER BY partecipants;
但是collection_set()[0]返回列rec中的第一个值(正确分组),而不是与参与者编号相关的值。 你有什么建议吗?
如果您需要更好地查看 SQL 版本,请使用here。
【问题讨论】:
试过 this solution ,不起作用。现在我收到了这个错误FAILED: SemanticException Column send_org Found in more than One Tables/Subqueries
如果你在 SPARK sql 中写这个而不是 hive 你可以我们:
SELECT send_org, first(rec_org), MAX(partecipants) from tab group by send_org;
【参考方案1】:
您可以使用row_number
来确定“参与者人数最多的行” 例如。
SELECT send_org, receive_org, partecipants
FROM (
SELECT
*,
ROW_NUMBER() OVER (
PARTITION BY send_org
ORDER BY partecipants DESC
) rn
FROM tab
) p
where rn=1
【讨论】:
以上是关于使用 group by 打印表中的最大值的主要内容,如果未能解决你的问题,请参考以下文章
EntityFramework 多个 Group by 查询
sql语言 怎么求每组最大,就是用group by 分组后,求每组某列最大?