【问题标题】:How to get the max row count grouped by the ID in sql如何在sql中获取按ID分组的最大行数
【发布时间】:2015-10-15 05:45:08
【问题描述】:

假设我有这张桌子: (列:Row 是基于列ID 的计数)

ID  | Row  | State | 
1   | 1    | CA    |
1   | 2    | AK    |
2   | 1    | KY    |
2   | 2    | GA    |
2   | 3    | FL    |
3   | 1    | WY    |
3   | 2    | HI    |
3   | 3    | NY    |
3   | 4    | DC    |
4   | 1    | RI    |

我想生成一个新列,该列在Row 列中具有最高数字,并按每一行的ID 列分组。我将如何做到这一点?我一直在搞乱 MAX()、GROUP BY 和一些分区,但每次都会遇到不同的错误。很难正确地解决这个问题。这是我的目标输出:

ID  | Row  | State | MaxRow
1   | 1    | CA    | 2
1   | 2    | AK    | 2
2   | 1    | KY    | 3
2   | 2    | GA    | 3
2   | 3    | FL    | 3
3   | 1    | WY    | 4
3   | 2    | HI    | 4
3   | 3    | NY    | 4
3   | 4    | DC    | 4
4   | 1    | RI    | 1

【问题讨论】:

    标签: sql sql-server select filter group-by


    【解决方案1】:

    使用MAX的窗口版本:

    SELECT ID, Row, State, MAX(Row) OVER (PARTITION BY ID) AS MaxRow
    FROM mytable
    

    Demo here

    【讨论】:

    • 谢谢!我用的是GROUP BY,你有你的PARTITION BY,它最终会和我在一起......
    • 这里有个问题,这个方法可以在老版本的sql server中使用吗?
    • @Juan 我认为它可以从 Sql Server 2005 开始使用。
    【解决方案2】:

    您可以在对表的查询和聚合表之间进行联接:

    SELECT t.*, max_row
    FROM   t
    JOIN   (SELECT   id, MAX([row]) AS max_row
            FROM     t
            GROUP BY id) agg ON t.id = agg.id
    

    【讨论】:

      【解决方案3】:

      您可以首先使用 group by id 和 max 创建一个查询,以获得最大的数字。然后将此查询作为子查询,并使用id进行内连接。

      然后使用子查询中的 max 列来获得最终结果。

      【讨论】:

        猜你喜欢
        • 2012-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多