【问题标题】:How do you count the rows in a SQL query which already used count, group by, and having before?如何计算 SQL 查询中已经使用过 count、group by 和 have 的行数?
【发布时间】:2010-09-19 17:36:49
【问题描述】:

例如,使用这个问题的答案:

How to select all users who made more than 10 submissions "如何选择提交超过 10 次的所有用户。"

select userId
from submission   
group by userId
having count(submissionGuid) > 10

假设现在我想知道这条 sql 语句输出的行数。计算行数的解决方案的可扩展性如何?

【问题讨论】:

    标签: sql count


    【解决方案1】:

    你可以试试这个: 我希望能帮助你。 select top(1) row_number() over(partition by count(userId) order by count(userId)) as RowNumber from submission group by userId having count(submissionGuid) > 10 order by userId desc

    【讨论】:

      【解决方案2】:

      嵌套查询:

      select count(*) from
        (select userId
         from submission   
         group by userId
         having count(submissionGuid) > 10) n
      

      已编辑以合并 mbrierst 关于嵌套子查询需要别名(末尾的“n”)的评论。 Oracle 不需要,但 SQL Server 需要。随意添加有关其他数据库平台使用情况的评论。

      【讨论】:

      • 对不起,我几乎只知道SQL Server。这是一个听起来不错的 Oracle 功能,但 SQL Server 别名要求总是让我烦恼。
      【解决方案3】:

      之前发布的示例中的小错误,需要子查询的表名的别名:

      
      select count(*) from
        (select userId
         from submission 
         group by userId
         having count(submissionGuid) > 10) t
      

      我不确定可扩展性,但这就是解决方案。如果这对您来说扩展性不够好,您需要考虑重大的设计更改,例如可能跟踪那些在一个单独的表中提交超过 10 个提交的人,您通过填充提交的应用程序更新该表格。或许多其他可能的解决方案。

      【讨论】:

      • Oracle 中不需要别名。您在 SQL Server 中确实需要它。很好的收获。
      【解决方案4】:

      在 SQL Server 中你可以这样做

      select @@ROWCOUNT 
      

      紧随您发布的查询之后。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-27
        • 1970-01-01
        • 2017-02-24
        • 2018-11-16
        • 2021-10-07
        • 2021-12-19
        相关资源
        最近更新 更多