Вычитание двух операторов SELECT в SQL (красное смещение) - PullRequest
0 голосов
/ 13 апреля 2020

Может кто-нибудь объяснить, почему ниже не работает?

((SELECT COUNT(*) FROM Table1) - (SELECT Count(Metric) FROM Table1)) as X

Count (*) выдаст мне все строки в таблице, а Count (Metri c) выдаст ненулевые значения в столбце Metri c. Таким образом, разница между ними даст мне количество нулевых значений в столбце Metri c, и я пометил этот столбец X. Я просто хочу разницу между этими двумя значениями в столбце X, но не уверен, почему он не работает.

Кстати, я знаю, что могу заставить его работать через следующее:

SELECT COUNT(*) as a, count(metric) as b, COUNT(*)-COUNT(metric) as c

Ответы [ 3 ]

0 голосов
/ 13 апреля 2020

Вам понадобится select результат:

SELECT ((SELECT COUNT(*) FROM Table1) - (SELECT Count(Metric) FROM Table1)) as X

Но проще использовать условное агрегирование:

SELECT SUM(CASE WHEN Metrics IS NULL THEN 1 ELSE 0 END) X FROM table1
0 голосов
/ 13 апреля 2020

Не уверен насчет амазонки-красного смещения, но в стандартном SQL я бы просто посчитал записи с нулевым полем, а не все минус, где они не равны.

SELECT COUNT(*) FROM Table1 WHERE Metric IS NULL;
0 голосов
/ 13 апреля 2020

Запрос SELECT должен начинаться с SELECT (или WITH или круглых скобок, если запрос является составным запросом с оператором множества, таким как UNION ALL).

Один метод :

SELECT ((SELECT COUNT(*) FROM Table1) - (SELECT Count(Metric) FROM Table1)) as X

Лучший метод:

SELECT COUNT(*) - Count(Metric) as X
FROM Table1
...