繁体   English   中英

MySQL Group_Concat Row to column and Count Value

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM