使用 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 打印表中的最大值的主要内容,如果未能解决你的问题,请参考以下文章

SQL group by 后查某字段最大值

EntityFramework 多个 Group by 查询

sql语言 怎么求每组最大,就是用group by 分组后,求每组某列最大?

sql:group by和 max

MySQL - 从 GROUP BY 获取最大 ID 并保持性能

使用 MDX 以具有与“GROUP BY”相同的功能,以仅显示一次项目,即最大值