选择 COUNT(*) 和 DISTINCT

问题描述 投票:0回答:7

在 SQL Server 2005 中,我有一个表

cm_production
列出了所有已投入生产的代码。该表有
ticket_number
program_type
program_name
push_number
以及其他一些列。

目标:按程序类型和推送数量统计所有不同的程序名称。

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

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 t-sql sql-server-2005 distinct
7个回答
991
投票

按程序类型和推送数量统计所有 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>)
:计算组中每一行的表达式并返回唯一的非空值的数量。


184
投票

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

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

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

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

97
投票

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

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

这里

dt
是一个派生表。


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

17
投票

试试这个:

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

2
投票

您可以尝试以下查询。

SELECT column1,COUNT(*) AS Count
FROM tablename where createddate >= '2022-07-01'::date group by column1

-1
投票

这是一个很好的例子,您想要获取存储在最后一个地址字段中的 Pincode 的数量

SELECT DISTINCT
    RIGHT (address, 6),
    count(*) AS count
FROM
    datafile
WHERE
    address IS NOT NULL
GROUP BY
    RIGHT (address, 6)
© www.soinside.com 2019 - 2024. All rights reserved.