MG *_*G N 5 sql database postgresql pivot crosstab
我有这个查询
select * from sales
shop | date | hour | row_no | amount
-----------+------------+-----------+--------+-----------
shop_1 | 2012-08-14 | 00:08:00 | P01 | 10
shop_2 | 2012-08-12 | 00:12:00 | O05 | 40
shop_2 | 2012-08-12 | 00:12:00 | A01 | 20
Run Code Online (Sandbox Code Playgroud)
我有 100 万行,我可以做这个查询
select shop, SUM(amount)
from sales
group by shop
shop | amount |
-----------+------------+
shop_1 | 5666 |
shop_2 | 4044 |
shop_3 4044 |
Run Code Online (Sandbox Code Playgroud)
但是我需要在专栏上度过几天,我不知道他们是否可以帮助我做到这一点
shop | 2012-08-1 | 2012-08-2 | 2012-08-3 |
-----------+------------+-----------+--------+-----------
shop_1 | 4005 | 5667 | 9987 |
shop_2 | 4333 | 4554 | 1234 |
shop_3 | 4555 | 6778 | 6677 |
Run Code Online (Sandbox Code Playgroud)
将在行中按存储分组,并在 postgresql 的列中按天分组
首先,您必须安装tablefunc扩展。从 9.1 版本开始,您可以使用 create extension 来完成此操作:
CREATE EXTENSION tablefunc;
select * from crosstab (
select shop, date, SUM(amount)
from sales
group by shop
'select date from sales order by 1')
AS ct(shop: text, '2012-08-1' text, '2012-08-2' text, '2012-08-3' text)
Run Code Online (Sandbox Code Playgroud)