【问题标题】:Counting the rows of a column where the value of a different column is 1计算不同列的值为 1 的列的行数
【发布时间】:2011-08-15 13:59:37
【问题描述】:

我正在使用select count distinct 来计算列中的记录数。但是,我只想计算不同列的值为 1 的记录。

所以我的桌子看起来有点像这样:

姓名-----类型
abc---------1
def----------2
吉----------2
jkl-----------1
mno--------1

我希望查询只计算 abc、jkl 和 mno 并因此返回“3”。

我无法使用 CASE 函数执行此操作,因为这似乎只适用于同一列中的条件。

编辑:对不起,我应该补充一下,我想做一个计算两种类型的查询。 所以结果应该更像: 1---3 2---2

【问题讨论】:

    标签: sql sql-server-2008 count distinct case


    【解决方案1】:
    SELECT COUNT(*) 
      FROM dbo.[table name] 
      WHERE [type] = 1;
    

    如果要按类型返回计数:

    SELECT [type], COUNT(*)
      FROM dbo.[table name]
      GROUP BY [type]
      ORDER BY [type];
    

    您应该避免使用 type 等关键字作为列名 - 如果您使用更具体的非保留字词,则可以避免使用大量方括号。

    【讨论】:

      【解决方案2】:

      我想你会想要(假设你不想计算 ('abc',1) 两次,如果它在你的表中两次):

      select count(distinct name) 
        from mytable
       where type = 1
      

      编辑:获取所有类型

      select type, count(distinct name)
        from mytable
       group by type
       order by type
      

      【讨论】:

      • 感谢您的快速回答,但我忘了提到我想进行一个计算两种类型的查询。所以结果应该更像:1---3 2---2
      【解决方案3】:

      从类型 = 1 的 tbl 中选择 count(1)

      【讨论】:

        【解决方案4】:
        ;WITH MyTable (Name, [Type]) AS
        (
        SELECT 'abc', 1
        UNION
        SELECT 'def', 2
        UNION
        SELECT 'ghi', 2
        UNION
        SELECT 'jkl', 1
        UNION
        SELECT 'mno', 1
        ) 
        SELECT COUNT( DISTINCT Name)
        FROM MyTable
        WHERE [Type] = 1
        

        【讨论】:

        • 一个小技巧:在 WITH 前加分号 :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-11
        相关资源
        最近更新 更多