SQL: 检测多个相同的条目作为一个批次
SQL: Detect multiple same entries as a batch
用例如下。当我有多个内容相同的条目时,结果应该以某种方式组合在一起,具体取决于确切的数据,除了一些重要的关键。
------------------------------------
| student_id | subject_id | marks |
------------------------------------
| STD001 | SUB001 | 10 |
| STD001 | SUB002 | 20 |
| STD002 | SUB001 | 10 |
| STD002 | SUB002 | 20 |
| STD003 | SUB001 | 11 |
| STD003 | SUB002 | 20 |
| STD004 | SUB001 | 11 |
| STD004 | SUB002 | 20 |
| STD005 | SUB001 | 11 |
| STD005 | SUB002 | 20 |
| STD005 | SUB003 | 30 |
------------------------------------
预期最终结果
-------------------------------------------------
| subject_id_str | marks_str | student_id |
-------------------------------------------------
| SUB001_SUB002 | 10_20 | STD001 |
| SUB001_SUB002 | 10_20 | STD002 |
| SUB001_SUB002 | 11_20 | STD003 |
| SUB001_SUB002 | 11_20 | STD004 |
| SUB001_SUB002_SUB003 | 11_20_30 | STD005 |
-------------------------------------------------
或
--------------------------------------------------------
| subject_id_str | marks_str | student_id_str |
--------------------------------------------------------
| SUB001_SUB002 | 10_20 | STD001_STD002 |
| SUB001_SUB002 | 11_20 | STD003_STD004 |
| SUB001_SUB002_SUB003 | 11_20_30 | STD005 |
--------------------------------------------------------
More Info: Using MySQL 5.7
您可以使用字符串聚合:
select
group_concat(subject_id order by subject_id separator '_') as subject_id_str,
group_concat(marks order by subject_id separator '_') as marks_str,
student_id
from mytable
group by student_id
用例如下。当我有多个内容相同的条目时,结果应该以某种方式组合在一起,具体取决于确切的数据,除了一些重要的关键。
------------------------------------
| student_id | subject_id | marks |
------------------------------------
| STD001 | SUB001 | 10 |
| STD001 | SUB002 | 20 |
| STD002 | SUB001 | 10 |
| STD002 | SUB002 | 20 |
| STD003 | SUB001 | 11 |
| STD003 | SUB002 | 20 |
| STD004 | SUB001 | 11 |
| STD004 | SUB002 | 20 |
| STD005 | SUB001 | 11 |
| STD005 | SUB002 | 20 |
| STD005 | SUB003 | 30 |
------------------------------------
预期最终结果
-------------------------------------------------
| subject_id_str | marks_str | student_id |
-------------------------------------------------
| SUB001_SUB002 | 10_20 | STD001 |
| SUB001_SUB002 | 10_20 | STD002 |
| SUB001_SUB002 | 11_20 | STD003 |
| SUB001_SUB002 | 11_20 | STD004 |
| SUB001_SUB002_SUB003 | 11_20_30 | STD005 |
-------------------------------------------------
或
--------------------------------------------------------
| subject_id_str | marks_str | student_id_str |
--------------------------------------------------------
| SUB001_SUB002 | 10_20 | STD001_STD002 |
| SUB001_SUB002 | 11_20 | STD003_STD004 |
| SUB001_SUB002_SUB003 | 11_20_30 | STD005 |
--------------------------------------------------------
More Info: Using MySQL 5.7
您可以使用字符串聚合:
select
group_concat(subject_id order by subject_id separator '_') as subject_id_str,
group_concat(marks order by subject_id separator '_') as marks_str,
student_id
from mytable
group by student_id