如何为同一个表n mysql编写子查询

时间:2016-04-27 09:50:06

标签: mysql sql

我有一个名为sample的数据库表。

create table sample(name varchar(50),  amount int(10));

insert into sample(name,amount) values('rose',1000);
insert into sample(name,amount) values('jhon',2000);
insert into sample(name,amount) values('rose',2000);
insert into sample(name,amount) values('rahel',1000);
insert into sample(name,amount) values('rose',3000);

我希望输出为,

+----------+----------+---------------+-----------+
+---rose---+--1000----+-------2000----+---3000----+
+---jhon---+--2000----+---------------+-----------+
+---rahel--+--1000----+---------------+-----------+

如何编写查询以获取上面的输出?

3 个答案:

答案 0 :(得分:0)

你需要使用group_concat(),下面的查询会给你输出

mapping

答案 1 :(得分:0)

您想要旋转值,但您没有用于旋转的列。您可以使用变量分配数字,然后使用条件聚合。假设你想要三个额外的列:

select name,
       max(case when rn = 1 then amount end) as amount1,
       max(case when rn = 2 then amount end) as amount2,
       max(case when rn = 3 then amount end) as amount3
from (select s.*,
             (@rn := if(@n = name, @rn + 1,
                        if(@n := name, 1, 1)
                       )
             ) as rn
      from sample s cross join
           (select @n := '', @rn := 0) params
      order by name
     ) s
group by name;

答案 2 :(得分:0)

您需要使用 GROUP_CONCAT()功能,您的查询将在下面提及:

从样本中选择名称,GROUP_CONCAT(金额) 按名称分组;

你会得到你想要的输出。