Объединить два запроса SELECT в один - PullRequest
5 голосов
/ 23 февраля 2011

У меня есть два запроса, в которых мне нужно только общее количество записей, но единственное отличие в запросах - это одно значение поля.

Пример;

SELECT COUNT(*) AS group_a
FROM tbl
WHERE category = 'value_a'

SELECT COUNT(*) AS group_b
FROM tbl
WHERE category = 'value_b'

Как я могу получить что-то вроде этого: (псевдо)

SELECT COUNT(*) AS group_a, COUNT(*) AS group_b
FROM tbl
WHERE category IN ('value_a', 'value_b')

Но результаты таковы

group_a , group_b
56, 101

Я думал, что оператор CASE в запросе фильтрует два, но как мне его реализовать? или есть лучший способ?

Я сейчас делаю UNION, но хотел знать, могу ли я вернуть одну запись с двумя результатами

Ответы [ 5 ]

6 голосов
/ 23 февраля 2011
select sum(case when category = 'value_a' then 1 else 0 end) as group_a,
       sum(case when category = 'value_b' then 1 else 0 end) as group_b
    from tbl
    where category in ('value_a', 'value_b')
2 голосов
/ 23 февраля 2011

Какие странные ответы на счет. Вот простой расчет:

SELECT COUNT(category = 'value_a' OR NULL) AS group_a, COUNT(category = 'value_b' OR NULL) AS group_b FROM tbl;

Агрегат COUNT в PostgreSQL допускает сложный синтаксис, как я показал. Обратите внимание, что OR NULL является весьма важным, поскольку COUNT считает только те строки, для которых условие category = '...' OR NULL дает ненулевой ответ.

2 голосов
/ 23 февраля 2011
SELECT category,COUNT(*) FROM tbl
GROUP BY category;

Это распространяется на несколько категорий. Если вы хотите только эти категории

SELECT category,COUNT(*) FROM tbl
WHERE category IN ('value_a', 'value_b')
GROUP BY category; 
2 голосов
/ 23 февраля 2011
select  sum(case when category = 'value_a' then 1 else 0 end) group_a,
        sum(case when category = 'value_b' then 1 else 0 end) group_b
from tbl
1 голос
/ 23 февраля 2011

Просто для удовольствия:

SELECT * 
FROM 
(
    SELECT category
    FROM tbl 
) subquery
PIVOT
(
    COUNT(category)
    FOR category IN ([value_a],[value_b])
) AS piv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...