【问题标题】:Selecting COUNT(*) with DISTINCT使用 DISTINCT 选择 COUNT(*)
【发布时间】:2010-12-04 01:03:13
【问题描述】:

在 SQL Server 2005 中,我有一个表 cm_production,其中列出了所有已投入生产的代码。该表有 ticket_numberprogram_typeprogram_namepush_number 以及其他一些列。

目标:按节目类型和推送数统计所有 DISTINCT 节目名称。

到目前为止我所拥有的是:

DECLARE @push_number INT;
SET @push_number = [HERE_ADD_NUMBER];

SELECT DISTINCT COUNT(*) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE push_number=@push_number 
GROUP BY program_type

这让我走到了一半,但它计算的是所有程序名称,而不是不同的名称(我不希望它在该查询中这样做)。我想我只是想不通如何告诉它只计算不同的程序名称而不选择它们。什么的。

【问题讨论】:

    标签: sql sql-server sql-server-2005 tsql


    【解决方案1】:

    按节目类型和推送数统计所有 DISTINCT 节目名称

    SELECT COUNT(DISTINCT program_name) AS Count,
      program_type AS [Type] 
    FROM cm_production 
    WHERE push_number=@push_number 
    GROUP BY program_type
    

    DISTINCT COUNT(*) 将为每个唯一计数返回一行。你想要的是COUNT(DISTINCT <expression>):计算组中每一行的表达式并返回唯一的非空值的数量。

    【讨论】:

      【解决方案2】:

      我需要获取每个不同值的出现次数。该列包含区域信息。 我最终得到的简单 SQL 查询是:

      SELECT Region, count(*)
      FROM item
      WHERE Region is not null
      GROUP BY Region
      

      这会给我一个列表,比如:

      Region, count
      Denmark, 4
      Sweden, 1
      USA, 10
      

      【讨论】:

      • 嘿 @Netsi1964 使用了相同的查询,但我想要 Region、State、Count,这可能吗?请帮帮我
      【解决方案3】:

      您必须为不同的列创建一个派生表,然后从该表中查询计数:

      SELECT COUNT(*) 
      FROM (SELECT DISTINCT column1,column2
            FROM  tablename  
            WHERE condition ) as dt
      

      这里dt是一个派生表。

      【讨论】:

      • 谢谢!在我的生活中,我在很多数据库中使用了很多 SQL,这是我第一次必须将其限定为带有“as X”的临时表。
      • 请注意,这里“dt”的正常术语是派生表,而不是临时表
      【解决方案4】:
      SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type] 
      FROM cm_production 
      WHERE push_number=@push_number 
      GROUP BY program_type
      

      【讨论】:

        【解决方案5】:

        试试这个:

        SELECT
            COUNT(program_name) AS [Count],program_type AS [Type]
            FROM (SELECT DISTINCT program_name,program_type
                      FROM cm_production 
                      WHERE push_number=@push_number
                 ) dt
            GROUP BY program_type
        

        【讨论】:

          【解决方案6】:

          这是一个很好的示例,您希望获取存储在最后地址字段中的 Pincode 计数

          SELECT DISTINCT
              RIGHT (address, 6),
              count(*) AS count
          FROM
              datafile
          WHERE
              address IS NOT NULL
          GROUP BY
              RIGHT (address, 6)
          

          【讨论】:

            猜你喜欢
            • 2013-06-19
            • 1970-01-01
            • 1970-01-01
            • 2019-11-18
            • 2011-10-06
            • 2021-03-06
            • 2015-05-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多