Использование условия Count в операторе Case для классификации переменной - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь подсчитать, сколько раз значение встречается в одном столбце, сгруппированном по идентификатору. Вот пример набора данных:

ID      Yes_or_No
1       Yes
1       No
2       Yes
3       Yes
4       Yes
4       No
5       Yes

Общая идея заключается в том, что если я подсчитываю различные значения для некоторого идентификатора, если счет больше единицы, то я могу создать новый столбец, который называет его «Возможно» для случаев, когда какой-то идентификатор принимает как «Да», так и «Да». «Нет» значения. Вот что я написал изначально, но не работает:

SELECT  ID,
        CASE WHEN COUNT(DISTINCT Yes_or_No)>1 AS 'Maybe'
        ELSE Yes_or_No
        END AS YesNoMaybe
FROM db
GROUP BY 1;

Это часть большого общего запроса, поэтому в идеале я хотел бы иметь возможность использовать Count в операторе Case, а не подзапрос в операторе FROM для экономии памяти. Другие обходные пути приветствуются.

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Ваше case выражение должно выглядеть как

SELECT  ID,
        (CASE WHEN COUNT(DISTINCT Yes_or_No) > 1 
              THEN 'Maybe' ELSE MIN(Yes_or_No)
         END) AS YesNoMaybe
FROM db
GROUP BY ID;

As не является частью выражения case, он является частью оператора select для определения столбца alise или таблицы alise

0 голосов
/ 01 мая 2018

Вам нужно изменить AS на THEN:

SELECT  ID,
        CASE WHEN COUNT(DISTINCT Yes_or_No)>1 THEN 'Maybe'
        ELSE MIN(Yes_or_No)    --here agg function is required
        END AS YesNoMaybe
FROM db
GROUP BY ID;   --GROUP BY 1 is antipattern (explicit name >> position)

Демоверсия DBFiddle

...