如何合并 mysql 中具有相同值的行
How to combine rows with same values in mysql
如何在不影响 select 语句中的 GROUP BY 主题的情况下,将第一行中具有相同值的行组合在一起,并将 null 或 space 放入行中?看看我想要实现的目标并帮助我。
我尝试的查询是:
SELECT regd, GROUP_CONCAT(name order by name SEPARATOR ' ') as name,
subject, sc, fm FROM table GROUP BY regd, subject
首先,我建议您在代码中而不是在数据库级别处理此问题!
但是,如果您绝对必须在一个查询中完成所有操作,您可以尝试 ranking over partition 并将 regd
列作为分区。您的预期输出在每个 regd
中具有相当任意排序的行。
此查询将在每个 regd
:
中按 subject
排序
select t.regd,
case when r=1 then t.name else null end as name,
t.subject,
t.sc,t.fm
from
(
select tt.*,
case when regd = @curRegd then @rank := @rank +1 else @rank:=1 end as r,
@curRegd := tt.regd
from table tt
join (SELECT @curRegd := 0,@rank:=0) r
order by regd,subject
) t
最后,根据您存储的数据示例,此处似乎不需要聚合,即 GROUP BY
子句。
如何在不影响 select 语句中的 GROUP BY 主题的情况下,将第一行中具有相同值的行组合在一起,并将 null 或 space 放入行中?看看我想要实现的目标并帮助我。
我尝试的查询是:
SELECT regd, GROUP_CONCAT(name order by name SEPARATOR ' ') as name,
subject, sc, fm FROM table GROUP BY regd, subject
首先,我建议您在代码中而不是在数据库级别处理此问题!
但是,如果您绝对必须在一个查询中完成所有操作,您可以尝试 ranking over partition 并将 regd
列作为分区。您的预期输出在每个 regd
中具有相当任意排序的行。
此查询将在每个 regd
:
subject
排序
select t.regd,
case when r=1 then t.name else null end as name,
t.subject,
t.sc,t.fm
from
(
select tt.*,
case when regd = @curRegd then @rank := @rank +1 else @rank:=1 end as r,
@curRegd := tt.regd
from table tt
join (SELECT @curRegd := 0,@rank:=0) r
order by regd,subject
) t
最后,根据您存储的数据示例,此处似乎不需要聚合,即 GROUP BY
子句。