【问题标题】:SQL subquery with COUNT help带有 COUNT 帮助的 SQL 子查询
【发布时间】:2023-05-27 19:58:01
【问题描述】:

我有一个有效的 SQL 语句

SELECT * FROM eventsTable WHERE columnName='Business'

我想将其添加为子查询...

COUNT(Business) AS row_count

我该怎么做?

【问题讨论】:

    标签: sql


    【解决方案1】:

    这可能是最简单的方法,但不是最漂亮的:

    SELECT *,
        (SELECT Count(*) FROM eventsTable WHERE columnName = 'Business') as RowCount
        FROM eventsTable
        WHERE columnName = 'Business'
    

    这也可以在不使用group by的情况下工作

    SELECT *, COUNT(*) OVER () as RowCount
        FROM eventsTables
        WHERE columnName = 'Business'
    

    【讨论】:

    • 请注意,OVER 不受 SQL 标准支持,并且不会在所有 RDBMS 中都可用(例如,MySQL doesn't support it)。
    【解决方案2】:
    SELECT e.*,
           cnt.colCount 
    FROM eventsTable e
    INNER JOIN (
               select columnName,count(columnName) as colCount
               from eventsTable e2 
              group by columnName
               ) as cnt on cnt.columnName = e.columnName
    WHERE e.columnName='Business'
    

    -- 增加空间

    【讨论】:

    • 这种方法对实现我想做的事情非常有帮助
    • 非常感谢,你是最棒的
    【解决方案3】:

    要获取行数吗?

    SELECT columnName, COUNT(*) AS row_count
    FROM eventsTable
    WHERE columnName = 'Business'
    GROUP BY columnName
    

    【讨论】:

    • 不能在 group by 中有where 子句。使用Having
    • @Jim - 您可以使用 where 子句和 group by。如果您想在使用 group by 时过滤聚合结果,则需要使用 having
    • Where 子句需要在 Group By 之前,Having 需要在 Group By 之后。
    【解决方案4】:

    假设有一个名为business的列:

    SELECT Business, COUNT(*) FROM eventsTable GROUP BY Business

    【讨论】: