Запит на SQL Server - Вибір COUNT (*) за допомогою DISTINCT


431

У SQL Server 2005 у мене є таблиця cm_production, в якій перерахований весь код, який було введено у виробництво. Таблиця містить номер_білець, тип_програми, а також ім'я програми та номер_сумка разом із деякими іншими стовпцями.

МЕТА: Порахуйте всі назви програм 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

Це робить мене частково там, але він рахує всі назви програм, а не окремі (що я не очікую, що це зробить у цьому запиті). Я думаю, що я просто не можу обернути голову, як сказати йому рахувати лише окремі імена програм, не вибираючи їх. Або щось.

Відповіді:


729

Порахуйте всі назви програм 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>): оцінює вираз для кожного рядка в групі і повертає кількість унікальних, ненульових значень.


110

Мені потрібно було отримати кількість випадків кожного окремого значення. У стовпці містилася інформація про регіон. Простий запит SQL, у якому я закінчив:

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

Що могло б дати мені такий список, як:

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

Ей @ Netsi1964 використовується такий самий запит, але я хочу, щоб регіон, штат, кількість, це було можливо? Будь ласка, допоможіть мені

48

Ви повинні створити похідну таблицю для різних стовпців, а потім запитати кількість з цієї таблиці:

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

Ось dtпохідна таблиця.


1
Дякую! Я використовував багато SQL у своєму житті в багатьох базах даних, і це перший раз, коли мені довелося кваліфікувати його як таблицю темп із "як X".
Ммм

6
Зауважимо, що звичайна термінологія для "dt" тут є похідною таблицею, а не тимчасовою таблицею
8forty

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

15

спробуйте це:

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

-1

Це хороший приклад, коли ви хочете підрахувати Pincode, який зберігається в останньому полі адреси

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

-6
select  count (distinct NumTar),'PROPIAS'
from ATM_TRANe with (nolock)
where Fecha>='2014-01-01'
  AND Fecha<='2015-05-31'and NetDestino=0
  and SystemCodResp=0
group by NetDestino 
union 
select sum (contar),'FORANEAS'
from  
(
  select  count(distinct NumTar) as contar
  from ATM_TRANe with (nolock)
  where Fecha>='2014-01-01'
    AND Fecha<='2014-01-31'
    and NetDestino!=0
    and SystemCodResp=0
  group by NetDestino
)dt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.