Mysql 将列拆分为多列

771*_*120 1 mysql sql

我有一张像:

  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 大师,所以我希望有一个我不知道的查询:)

Gor*_*off 5

只需使用条件聚合:

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)