嵌套SQL查询在MySql中以不同的形式运行时抛出错误

Ram*_*min 0 mysql sql select nested-queries

我有一个SELECT查询,它应该有SELECT来自同一个表的几个嵌套查询,但是不同的WHERE子句来生成新列.

问题是每个单一形式的子查询运行良好,但当它们变成子查询时,MySql会抛出一个ERROR.

这是我的SQL:

SELECT user, 
(SELECT SUM(amount) from my_table WHERE type='form1' group by user) as form1,
(SELECT SUM(amount) from my_table WHERE type='form2' group by user) as form2,
(SELECT SUM(amount) from my_table WHERE type='form3' group by user) as form3,
(SELECT SUM(amount) from my_table WHERE type='form4' group by user) as form4,
(SELECT SUM(amount) from my_table WHERE type='form5' group by user) as form5,
(SELECT SUM(amount) from my_table WHERE type='form6' group by user) as form6
from my_table group by user;
Run Code Online (Sandbox Code Playgroud)

我希望Query生成这种结构:

user | form1 | form2 | form3 | form4 | form5 | form6
     |       |       |       |       |       |
Run Code Online (Sandbox Code Playgroud)

我该如何编辑这个SQL?

Gor*_*off 5

你想要条件聚合:

select user,
       sum(case when type = 'form1' then amount end) as form1,
       sum(case when type = 'form2' then amount end) as form2,
       sum(case when type = 'form3' then amount end) as form3,
       sum(case when type = 'form4' then amount end) as form4,
       sum(case when type = 'form5' then amount end) as form5,
       sum(case when type = 'form6' then amount end) as form6
from my_table
group by user;
Run Code Online (Sandbox Code Playgroud)

您的错误至少发生,因为子查询返回多行.将group by在子查询几乎意味着他们将返回多行的每个用户.

  • 因为这是正确的,但为了效率,你可以考虑(a)制作`CASE`值而不是搜索,以及(b)为每个增加一个'ELSE 0`. (2认同)