[英]MySQL Group_Concat Row to colum and Count Value
我正在使用 2 个表,需要帮助以使用组 concat 生成 output,我需要先对值求和以进行分组
这是小提琴: https://www.db-fiddle.com/f/kSwpa6y4UByAMeQWix3m3x/1
这是表格:
CREATE TABLE teacher (
TeacherId INT, BranchId VARCHAR(5));
INSERT INTO teacher VALUES
("1121","A"),
("1132","A"),
("1141","A"),
("2120","B"),
("2122","B"),
("2123","B");
CREATE TABLE activities (
ID INT, TeacherID INT, Hours INT);
INSERT INTO activities VALUES
(1,1121,2),
(2,1121,1),
(3,1132,1),
(4,1141,NULL),
(5,2120,NULL),
(6,2122,NULL),
(7,2123,2),
(7,2123,2);
我的 SQL:
select IFNULL(sumhours.hr,0) as totalhours, t.branchid, t.teacherid
from teacher t
left join
(select teacherid, sum(hours) as hr from activities
group by teacherid
order by hr asc) as sumhours
on
t.teacherid = sumhours.teacherid
order by branchid, hr
Output:
+---------------+-------------------+--------------------+
| totalhours | branchid | teacherid |
+---------------+-------------------+--------------------+
| 0 | A | 1141 |
| 1 | A | 1132 |
| 3 | A | 1121 |
| 0 | B | 2120 |
| 0 | B | 2122 |
| 4 | B | 2123 |
+---------------+-------------------+--------------------+
解释:
表教师由教师id和分支id组成,而表活动由id、外键教师id和小时组成。 小时表示教师进行的每项活动的持续时间。 老师可以做不止一项活动,也可以不做任何活动。 不做任何活动的教师将被设置为 null。
查询的目的是生成一个表格,其中包含按分支和按小时分组的教师活动摘要。
在预期的 output 表中,“小时”是一个固定值,表示从 0 到 4 的小时。A 和 B 列是分支。 该值表示正在开展活动的教师总数。 因此,对于第 0 行,分支 A 有 1 位老师,分支 B 有 2 位老师没有做活动。
预期 output:
+-----------+------------+------------+
| Hours | A | B |
+-----------+------------+------------+
| 0 | 1 | 2 |
| 1 | 1 | 0 |
| 2 | 0 | 0 |
| 3 | 1 | 0 |
| 4 | 0 | 1 |
+-----------+------------+------------+
看来你已经很清楚了...
SELECT totalhours hours
, branchid
, COUNT(*) total
FROM
( SELECT COALESCE(y.hr,0) totalhours
, x.branchid
, x.teacherid
FROM teacher x
JOIN
( SELECT teacherid
, SUM(hours) hr
FROM activities
GROUP
BY teacherid
ORDER
BY hr ASC
) y
ON x.teacherid = y.teacherid
) a
GROUP
BY hours
, branchid
ORDER
BY hours
, branchid;
对于 rest,我将在应用程序代码中处理 pivot(以及任何缺失的数据)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.