我有一张像:
id | cat | price
----------------------
0 | 1 | 2
0 | 2 | 1
0 | 1 | 1
1 | 1 | 31
1 | 2 | 5
----------------------
Run Code Online (Sandbox Code Playgroud)
我喜欢选择它:
id | cat1_price | cat2_price
----------------------------------
0 | 3 | 1
1 | 31 | 5
----------------------------------
Run Code Online (Sandbox Code Playgroud)
到目前为止我的查询:
SELECT SUM(`price`) as cat1_price FROM price_table WHERE cat = 1 GROUP BY id
Run Code Online (Sandbox Code Playgroud)
它可以获取所需的列之一。我怎么能两者兼得?
我也尝试过类似的事情:
SELECT SUM(`price`) as cat1_price
(SELECT SUM(`price`) FROM price_table WHERE cat = 2) as cat2_price
FROM price_table WHERE cat = 1 GROUP BY id
Run Code Online (Sandbox Code Playgroud)
这工作太慢了。实际的表非常大,并且有一些连接。
我不是 sql 大师,所以我希望有一个我不知道的查询:)
只需使用条件聚合:
SELECT id, SUM(case when cat = 1 then `price` else 0 end) as cat1_price,
SUM(case when cat = 2 then `price` else 0 end) as cat1_price
FROM price_table
GROUP BY id;
Run Code Online (Sandbox Code Playgroud)