【问题标题】:SQL group-by largestSQL 按最大分组
【发布时间】:2021-09-09 15:09:14
【问题描述】:

我有一个表,其中包含如下所示的对象的共现计数:

col1    col2    count   
item1   item2    3
item3   item2    1
item1   item4    1
item2   item3    2 

我想在 col1 上按最大的前 n 个计数进行分组,但是如果我在上表中这样做,因为所有对象对都不可用,结果将如下:(这是不正确的)

col1    col2    count   
item1   item2    3
item3   item2    1
item2   item3    2 

如果我交换列然后将它们添加回同一个表,这将是结果:

col1    col2    count   
item1   item2    3
item3   item2    1
item1   item4    1
item2   item3    2 
item2   item1    3
item2   item3    1
item4   item1    1
item3   item2    2 

并且 group by 会产生:(正确的结果)

col1    col2    count   
item1   item2    3
item2   item1    3
item4   item1    1
item3   item2    2 

产生这种分组依据的正确查询是什么?我是否正确地认为该列需要交换和连接,或者是否有更好的方法来解决这个问题? (我正在使用 Postgres)

在上面我按前 1 显示分组,为了保持示例简单,实际上这是按前 10 分组

【问题讨论】:

    标签: sql database postgresql group-by


    【解决方案1】:

    这回答了问题的原始版本。

    认为你想要:

    select v.col1, v.col2, max(t.count)
    from t cross join lateral
         (values (col1, col2), (col2, col1)) v(col1, col2)
    group by v.col1, v.col2;
    

    【讨论】:

    • 只是一个澄清,我希望做一个前 10 名最大的分组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    相关资源
    最近更新 更多