[英]convert column to row in postgresql database
我当前的查询是:
select rulename,status, count(*)
from triggered_rule_info
group by status, rulename
结果是:
rulename status count
eorule1 ack 1
eorule1 open 1
eorule1 close 7
eorule2 open 1
eorule2 ack 1
但我希望结果是:
rulename ack open close
eorule1 1 1 7
eorule2 1 1
我该如何实现? 我的PostgreSQL版本是9.4。
为此,您可以使用filter
子句:
select rulename
count(*) filter (where status = 'ack') as ack,
count(*) filter (where status = 'open') as open,
count(*) filter (where status = 'close') as closed
from triggered_rule_info
group by rulename
order by rulename;
您可以使用CASE - WHEN
和GROUP BY
子句来获得所需的结果。 如果status
其他值更多,则可能需要添加更多的CASE
语句。
范例 :
SELECT rulename
, SUM( CASE status WHEN 'ack' THEN 1 ELSE 0 END ) AS "ack"
, SUM( CASE status WHEN 'open' THEN 1 ELSE 0 END ) AS "open"
, SUM( CASE status WHEN 'close' THEN 1 ELSE 0 END ) AS "close"
FROM triggered_rule_info
GROUP BY rulename
ORDER BY rulename
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.