Группировка по одному столбцу и подсчет по нескольким столбцам

Я пытаюсь написать запрос по приведенному ниже сценарию.

Результат

Пример:

ColumnA    ColumnB    
A           B         
B           C             

Результат:

ColumnA   countB   countC
A         1         0
B         0         1

В заголовке сказано, что вам нужно сделать: GROUP BY для одного столбца и COUNT() для остальных.

jarlh 22.01.2019 09:01
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
1
38
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Он должен работать:

  Select 
       columnA,
       count(ColumnB) as ColumnB,
       count(ColumnC) as ColumnC
    From Table
    Group By
       columnA

извините за некорректный вопрос. Пожалуйста, проверьте отредактированный

python_interest 22.01.2019 09:19

Для подтверждения этого недостаточно примеров данных, но, судя по заголовку вашего вопроса, вы, похоже, ищете агрегацию условий:

SELECT
    columnA,
    COUNT(CASE WHEN columnB = 'B' THEN 1 END) countB,
    COUNT(CASE WHEN columnB = 'C' THEN 1 END) countC
FROM mytable
GROUP BY columnA

Помните, что COUNT(column) считает только ненулевые значения.

jarlh 22.01.2019 09:11

@jarlh: верно. Я упростил запрос соответственно, спасибо!

GMB 22.01.2019 09:17

извините за некорректный вопрос. пожалуйста, смотрите обновленный

python_interest 22.01.2019 09:20

Предполагая, что ваш реальный сценарий больше, я думаю, что лучше использовать сводную точку.

DECLARE @table TABLE(ColumnA CHAR(1), ColumnB CHAR(1))

INSERT @table VALUES ('A', 'B')
INSERT @table VALUES ('B', 'C')

SELECT ColumnA, A AS CountA, B AS CountB, C AS CountC, D AS CountD....
FROM
(
    SELECT ColumnA, ColumnB
    FROM @table
) AS Source
PIVOT
(
    Count(ColumnB)
    FOR ColumnB IN ([A], [B], [C], [D].....)
) AS Pvt
Ответ принят как подходящий

Из ваших выборочных данных агрегация не требуется:

SELECT columnA,
       (CASE WHEN columnB = 'B' THEN 1 ELSE 0 END) as countB,
       (CASE WHEN columnB = 'C' THEN 1 ELSE 0 END) as countC
FROM t;

Другие вопросы по теме