【发布时间】:2014-02-12 20:05:44
【问题描述】:
我正在尝试编写一个只计算满足条件的行的查询。
例如,在 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
好(80
优秀(90
这就是我期望看到的结果:
+========+=========+======+===========+
| 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);
【问题讨论】:
-
也许你想看看操作员 BETWEEN? postgresqltutorial.com/postgresql-between
标签: postgresql amazon-web-services amazon-redshift