SELECT
min(revenue) FILTER (WHERE make = ‘Ford’) min_ford,
max(revenue) FILTER (WHERE make = ‘Ford’) max_ford,
min(revenue) FILTER (WHERE make = ‘Renault’) min_renault,
max(revenue) FILTER (WHERE make = ‘Renault’) max_renault
car_sales;
我们使用
AS
关键字为这些总和分别创建了别名,以便区分结果,否则结果集中的每一列都将简单地标记为
min
或
max
。以下是结果
福特最低价
福特最高价
雷诺最低价
雷诺最高价
1010000
2520000
1004000
23000000
要用 CASE 语句获得相同的结果,您必须使用以下查询
SELECT
min(CASE WHEN make = ‘Ford’ THEN revenue ELSE null END) min_ford,
max(CASE WHEN make = ‘Ford’ THEN revenue ELSE null END) max_ford,
min(CASE WHEN make = ‘Renault’ THEN revenue ELSE null END) min_renault,
max(CASE WHEN make = ‘Renault’ THEN revenue ELSE null END) max_renault
car_sales;
对于这种情况,
FILTER
更容易理解。
使用 FILTER 透视表
我们可以使用
FILTER
子句将行透视为表,您经常需要这样做才能生成报表。假设我们想知道每个月售出的汽车总数。我们可以使用
GROUP BY
通过以下查询来做到这一点
SELECT sales_month, sum(quantity) FROM car_sales GROUP BY sales_month;