【问题标题】:SQL MAX SELECT COUNT QuetionSQL MAX SELECT COUNT 问题
【发布时间】:2017-08-22 01:13:01
【问题描述】:

数据库之类的

id    order_no
1     O1    
1     O2
2     O3
2     O4
3     O5

我想找到订购最多的人 答案应该是这样的

id    max(count)
1     2
2     2

这是我的 SQL

select order_user, MAX(times)
from (select order_user, count(order_user) AS times
      from labt04
      group by order_user);

但它不会提醒单个组功能 有人知道怎么改吗?

【问题讨论】:

    标签: sql select count


    【解决方案1】:

    如果你使用的是 SQL Server,你可以使用Common Table Expression 得到你想要的:

    WITH my_cte (my_id, times)
    AS
    (
        SELECT      my_id, COUNT(*)
        FROM        labt04
        GROUP BY    my_id
    )
    SELECT      my_id, times
    FROM        my_cte
    WHERE       times = (SELECT MAX(times) FROM my_cte)
    

    【讨论】:

    • Oracle、Postgres 甚至 SQLite 也支持 CTE。如果 Gordon 的答案有效,那么您的答案也很有可能。
    【解决方案2】:

    在 ANSI 标准 SQL 中,您可以使用 rank():

    select order_user, times
    from (select order_user, count(*) AS times,
                 rank() over (order by count(*) desc) as seqnum
          from labt04
          group by order_user
         )
    where seqnum = 1;
    

    【讨论】:

      【解决方案3】:

      您可以在 SQL 中使用多个 CTE + ROW_NUMBER() + MAX() 语句,如下所示:

      会比top clause更快

      ;WITH Order_CTE_Row_Number_By_Id
      AS
      (
          SELECT      id, 
                      Row_NUmber() over (Partition by id order by id) AS rowNumber_Id,
                      order_no
          FROM        labt04
      ),
      Order_CTE_Max_By_rowNumberById
      AS
      (
          SELECT      id, 
                      Max(rowNumber_Id) over (order by rowNumber_Id desc) AS maxNumber_RowNumber_Id,
                      rowNumber_Id,
                      order_no
          FROM        Order_CTE_Row_Number_By_Id
      )
      SELECT  id, maxNumber_RowNumber_Id AS 'max(count)'
      FROM    Order_CTE_Max_By_rowNumberById
      WHERE   rowNumber_Id = maxNumber_RowNumber_Id
      

      【讨论】:

        猜你喜欢
        • 2021-09-11
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 2012-12-26
        • 2011-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多