SQL-запрос: как подсчитать вхождение определенного значения в столбец без группировки по этому столбцу? - PullRequest
0 голосов
/ 31 октября 2018

У меня есть такая таблица:

id | value
1  | a
1  | a
1  | b
1  | c
2  | a
2  | a
2  | a 
2  | c

И я хочу count(*) by id, а затем count(value==a) by id, что означает, что это желаемые результаты:

id | total_counts | a_counts
1  |      4       |   2 
2  |      4       |   3

Я знаю, как это сделать, присоединившись к двум подзапросам, но есть ли более простой / быстрый способ сделать это? Понравился этот псевдокод:

SELECT id, COUNT(*) AS total_counts, COUNT(value==a) AS a_counts
FROM table
GROUP BY id 

Не уверен, есть ли способ выполнить часть COUNT(value==a). Пожалуйста, помогите.

1 Ответ

0 голосов
/ 31 октября 2018

Вы можете использовать SUM:

SELECT id, COUNT(*) AS total_counts, SUM(value='a') AS a_counts
FROM table
GROUP BY id;

Или, если у вас SQLite 3.25, вы можете использовать оконную версию:

SELECT /*DISTINCT*/
     id,
     COUNT(*) OVER(PARTITION BY id) AS total_counts,
     COUNT(*) FILTER (WHERE value = 'a') OVER(PARTITION BY id) AS a_counts
FROM tab
...