Количество записей из одного столбца ГДЕ значения разные - PullRequest
2 голосов
/ 02 октября 2019

Я довольно новичок в SQL-сервере и переполнении стека, так что простите, если мой вопрос неверный или наивный. Я попытался выполнить поиск, но не смог найти именно то, что искал.

У меня есть таблица с уникальным идентификатором столбца (varchar 50) и другим column1 изINT со значениями 1, 2, 3 или 4. Я пытаюсь создать SELECT набор результатов, который COUNT содержит все записи, значения которых меньше 4 в column1 идругой COUNT, который возвращает количество записей, где column1 равно 4. Можно ли создать этот набор результатов в одном запросе?

В идеале я хотел бы, чтобы мой набор результатов выглядел какследующее:

Total Records       Records w/ *column1* < 4             Records w/ *column1* = 4
===========           ==================                     ================
   1000                      850                                    150

После завершения некоторых поисков я попробовал следующее:

SELECT COUNT(unique_id) 'Total'
, COUNT(CASE
WHEN column1 = 4 THEN '1'
ELSE '0' 
END) AS 'Records w/ 4'
, COUNT(CASE
WHEN column1 < 4 THEN '1'
ELSE '0'
END) AS 'Records < 4'
FROM mytable
; 

, который возвращает набор результатов, где 'Record w / 4' и 'Total' оба равнытот же номер.

Ответы [ 2 ]

1 голос
/ 02 октября 2019

Попробуйте это-

SELECT COUNT(*) 'Total'
, SUM(CASE WHEN column1 = 4 THEN 1 ELSE 0 END) AS 'Records w/ 4'
, SUM(CASE WHEN column1 < 4 THEN 1 ELSE 0 END) AS 'Records < 4'
FROM mytable
0 голосов
/ 02 октября 2019

Вы просто ищете простую условную агрегацию как

SELECT COUNT(1) Total,
       SUM(CASE WHEN Value < 4 THEN 1 ELSE 0 END) LessThan4,
       SUM(CASE WHEN Value = 4 THEN 1 ELSE 0 END) EqualTo4,
       SUM(CASE WHEN Value > 4 THEN 1 ELSE 0 END) MoreThan4
FROM
(
  VALUES
  (1, 1),
  (2, 2),
  (3, 3),
  (4, 4),
  (5, 5)
) T(Id, Value);
...