回答編集履歴

1

参考

2023/06/06 04:54

投稿

yambejp
yambejp

スコア114883

test CHANGED
@@ -1,3 +1,50 @@
1
1
  まず集計結果をサブクエリーにします。
2
2
  部署ごとに表示したいなら部署に対してleft joinします
3
3
  例示のように集計に対して部署をjoinするならright joinです
4
+
5
+ # 参考
6
+ 集計のところを思いっきり省略するとこんな感じです
7
+ ```SQL
8
+ CREATE TABLE `t_general` (
9
+ `id` int primary key auto_increment,
10
+ `depa_id` int,
11
+ `val` int
12
+ );
13
+ insert into t_general(depa_id,val) values
14
+ (1,100),
15
+ (1,200),
16
+ (1,300),
17
+ (2,100),
18
+ (2,150),
19
+ (3,120);
20
+
21
+ CREATE TABLE `department` (
22
+ `id` int(11) NOT NULL,
23
+ `depa` varchar(20)
24
+ );
25
+ INSERT INTO `department` (`id`,`depa`) VALUES
26
+ (1, '----'),
27
+ (2, '総務'),
28
+ (3, '経理'),
29
+ (4, '庶務'),
30
+ (5, '人事部');
31
+ ```
32
+ # 集計
33
+ ```SQL
34
+ select t1.id,t1.depa,coalesce(t2.val,0) as val
35
+ from department as t1
36
+ left join(
37
+ select depa_id,sum(val) as val from t_general
38
+ group by depa_id
39
+ ) as t2 on t1.id=t2.depa_id
40
+ ```
41
+ # 結果
42
+
43
+ |id|depa|val|
44
+ |--:|:--|--:|
45
+ |1|----|600|
46
+ |2|総務|250|
47
+ |3|経理|120|
48
+ |4|庶務|0|
49
+ |5|人事部|0|
50
+