MySQLのconcatおよびgroup_concatの使用

1573 ワード

自己理解
concat:1行のデータの複数列のデータを1列のデータにマージする
group_concat:複数行のデータの列を1行および1列のデータにマージ
 
concatはgroupbyキーワードを使用する必要はありません
group_concatはgroupbyキーワードを使用する必要があります.そうしないと、エラーが発生します.
group_concat適用シーンの例
学生表データ
id  name  age
1枚三20
2王さん30
3李四22
4王さん25
需要:同じ名前の学生を検索
select group_concat(student.id  SEPARATOR ','),name from student group by name 


クエリ結果
id  name 
1枚3枚
2,4王さん
3李四
すなわち、もともと「老王」という名前のデータが2行あり、idが統合され、中間が区切り文字で区切られている
 
会社プロジェクト開発に書いてあるsql添付
WITH jobName AS(
	SELECT GROUP_CONCAT(job.`name` SEPARATOR ',')  AS job_name, uoj.user_org_id
        FROM user_org_job uoj, job  
        WHERE uoj.job_id = job.id 
        GROUP BY uoj.user_org_id  
),
positionName AS(
	SELECT GROUP_CONCAT(p.`name` SEPARATOR ',')  AS position_name, uop.user_org_id
        FROM user_org_position uop, POSITION AS p 
        WHERE uop.position_id = p.id
        GROUP BY uop.user_org_id  
)
SELECT 
USER.*,
org.`id` AS org_id,
org.`name` AS org_name,
org.`type` AS org_type,
uo.`type` AS uo_type,
jobName.job_name,
positionName.position_name
FROM USER
LEFT JOIN  user_org  AS uo 
ON USER.`id` = uo.user_id
LEFT JOIN org 
ON org.`id` = uo.`org_id`
LEFT JOIN jobName 
ON  uo.id = jobName.user_org_id
LEFT JOIN positionName 
ON  uo.id = positionName.user_org_id
ORDER BY NAME ASC

参照先:
https://blog.csdn.net/mary19920410/article/details/76545053/
group_concatの使い方
https://blog.csdn.net/qq_35531549/article/details/90383022