将唯一值合并到一行中,in MySQL [duplicate]

beq87vna  于 2023-03-17  发布在  Mysql
关注(0)|答案(1)|浏览(129)

此问题在此处已有答案

Can I concatenate multiple MySQL rows into one field?(16个答案)
昨天关门了。
我有一个名为students的表,它包含了学生的系和年龄,每一行代表学生的系和他们各自的年龄。
| 部门|年龄|
| - ------|- ------|
| 土木工程|十九|
| 土木工程|二十个|
| 统计学|十九|
| 统计学|十九|
| 机械工程|二十一|
| 机械工程|二十个|
| 计算机科学|二十五|
| 计算机科学|二十四|
| 土木工程|二十一|
| 土木工程|二十二|
| 统计学|二十个|
| 机械工程|二十个|
现在,我需要找到每个部门的唯一年龄计数,并在第三列中列出与该部门对应的所有唯一年龄。输出应如下所示:
| 部门|计数唯一年龄|唯一_年龄|
| - ------|- ------|- ------|
| 土木工程|四个|十九、二十、二十一、二十二|
| 统计学|第二章|十九、二十|
| 机械工程|第二章|二十、二十一|
| 计算机科学|第二章|二十四、二十五|
我已经试过了-

SELECT DISTINCT department, COUNT(DISTINCT age) AS count_unique_age, 
FROM students
GROUP BY department

使用此查询,我可以解出前两列。如何解出第三列?

kxxlusnw

kxxlusnw1#

这是一个简单的聚合查询;在MySQL中,我们可以使用group_concat进行字符串聚合。

select department,
    count(distinct age) count_unique_age,
    group_concat(distinct age order by age separator ', ') distinct_ages
from mytable
group by department

由于我们只计算非重复值,我想知道首先在子查询中进行重复数据删除是否更有效:

select department,
    count(age) count_unique_age,
    group_concat(age order by age separator ', ') distinct_ages
from (select distinct department, age from mytable) t
group by department

相关问题