簡體   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