演示:dbfiddle
您可以使用FILTER
clause:
SELECT
year, month, week,
MAX("count") FILTER (WHERE type = 'A') as A, -- 2
MAX("count") FILTER (WHERE type = 'B') as B,
MAX("count") FILTER (WHERE type = 'C') as C
FROM mytable
GROUP BY year, month, week -- 1
ORDER BY year, month, week
或者你可以使用CASE
clause:
SELECT
year, month, week,
MAX (CASE WHEN type = 'A' THEN "count" END) AS A,
MAX (CASE WHEN type = 'B' THEN "count" END) AS B,
MAX (CASE WHEN type = 'C' THEN "count" END) AS C
FROM mytable
GROUP BY year, month, week
ORDER BY year, month, week
- 在这两种情况下,您都需要执行
GROUP BY
action.
- 这使得聚合函数变得必要,例如
MAX()
or SUM()
。最后你需要应用一种过滤器(CASE
or FILTER
) 仅聚合相关数据。
此外: 请注意这几个字count
, year
, month
, week
are SQL关键字。为了避免任何复杂化,您应该考虑其他列名称。