Я пытаюсь написать запрос, который подсчитывает только строки, соответствующие условию.
Например, в MySQL я бы написал это следующим образом:
SELECT
COUNT(IF(grade < 70), 1, NULL)
FROM
grades
ORDER BY
id DESC;
Однако, когда я пытаюсь сделать это в Redshift, он возвращает следующую ошибку:
ОШИБКА: функция if (boolean, integer, "unknown" ) не существует
Подсказка: никакая функция не соответствует указанному имени и типам аргументов. Возможно, вам придется добавлять явные типы.
Я проверил документацию для условных операторов, и нашел
NULLIF(value1, value2)
но он только сравнивает value1 и value2, и если такие значения равны, он возвращает null.
Я не мог найти простой оператор IF, и на первый взгляд я не мог найти способ делать то, что хочу.
Я попытался использовать выражение CASE, но я не получаю результаты, которые хочу:
SELECT
CASE
WHEN grade < 70 THEN COUNT(rank)
ELSE COUNT(rank)
END
FROM
grades
Вот так я хочу считать вещи:
-
не удалось (класс < 70)
-
средний (70 <= класс < 80)
-
good (80 <= grade < 90)
-
отлично (90 <= grade <= 100)
и я ожидаю увидеть результаты:
+========+=========+======+===========+
| failed | average | good | excellent |
+========+=========+======+===========+
| 4 | 2 | 1 | 4 |
+========+=========+======+===========+
но я получаю следующее:
+========+=========+======+===========+
| failed | average | good | excellent |
+========+=========+======+===========+
| 11 | 11 | 11 | 11 |
+========+=========+======+===========+
Я надеюсь, что кто-то может указать мне в правильном направлении!
Если это поможет здесь несколько примеров информации
CREATE TABLE grades(
grade integer DEFAULT 0,
);
INSERT INTO grades(grade) VALUES(69, 50, 55, 60, 75, 70, 87, 100, 100, 98, 94);