SQL ГДЕ утверждение в SELECT? - PullRequest
1 голос
/ 27 февраля 2020

Итак, я пытаюсь вывести 2 столбца, которые вызывают одну и ту же функцию. За исключением 1 столбца, я хочу, чтобы количество значений было меньше 5, а для другого столбца я хочу, чтобы количество значений было больше 5.

SELECT COUNT (col_a) FROM table WHERE col_a < 5

- это то, как вы получите первое.

Но мне интересно, как объединить 2 запроса. Что-то вроде:

SELECT 
    COUNT(col_a WHERE col_a < 5) AS col_1, 
    COUNT(col_a WHERE col_a > 5) AS col_2 
FROM table

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Вы ищете условное агрегирование:

SELECT 
     SUM(CASE WHEN col_a < 5 THEN 1 ELSE 0 END) AS col_1, 
     SUM(CASE WHEN col_a > 5 THEN 1 ELSE 0 END) AS col_2 
FROM mytable

В зависимости от вашей базы данных могут быть доступны более точные варианты. Для баз данных, которые поддерживают стандартное предложение FILTER для агрегатных функций (например, Postgres):

SELECT 
     COUNT(*) FILTER(WHERE col_a < 5) AS col_1, 
     COUNT(*) FILTER(WHERE col_a > 5) AS col_2 
FROM mytable

In MySQL:

SELECT 
     SUM(col_a < 5) AS col_1, 
     SUM(col_a > 5) AS col_2 
FROM mytable
2 голосов
/ 27 февраля 2020

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

SELECT (
    SELECT COUNT(*)
    FROM table
    WHERE col_a < 5
)
, (
    SELECT COUNT(*)
    FROM table
    WHERE col_a < 5
)
...