iT邦幫忙

0

[MySQL]想詢問若要取得有效的不重複數量,SQL要怎麼下比較好??

已重新整理後發問,請直接查看這篇:
https://ithelp.ithome.com.tw/questions/10195041

問題:目前的學生數量只能算是人次(會重複計算),想詢問前輩們,若想得到有效不重複班級的學生數量總合要如何下sql比較好??

目標:取得各科各學期做統計,要能知道有哪些計畫、班級、受益學生多少的統計表

環境:php+mysql

資料表

class 班級

class_id class_schId class_year class_depId class_grade class_room class_studentNbr
主鍵id 學校 學年度 科系id 年級 班級 學生數量
1 123 108 456 30
2 123 108 456 30

plan 計畫

plan_id plan_schId plan_year plan_depId plan_semester plan_name class_id
主鍵id 學校 學年度 科系id 學期 計畫名稱 班級id
1 123 108 456 1 計畫1 1
2 123 108 456 1 計畫1 2
3 123 108 456 1 計畫2 1
4 123 108 456 1 計畫2 2

目前的SQL

select plan_schId,plan_depId,plan_semester
,group_concat(distinct plan_name) -- 計畫名稱
,group_concat(distinct concat(class_grade,'年',class_room,'班')) -- 班級(不重複)
,sum(class_studentNbr) -- 學生人數
from plan
inner join class on plan.class_id = class.class_id
group by plan_schId,plan_depId,plan_semester

預期結果

學校 學年度 科系 學期 計畫 班級 學生人數
123 108 456 1 計畫1,計畫2 一年甲班,二年乙班 60
123 108 456 2 計畫1,計畫2 一年甲班,二年乙班 60
小魚 iT邦大師 1 級 ‧ 2019-08-26 12:43:26 檢舉
所以你希望的結果是什麼?
舜~ iT邦高手 1 級 ‧ 2019-08-26 13:24:17 檢舉
有效不重複班級的學生數量總合,文字已修

1 個回答

1
石頭
iT邦研究生 2 級 ‧ 2019-08-26 13:17:17

先使用子查詢完成對於planclass的聚合計算.
在使用JOIN關聯兩個子查詢結果集

select 
	t1.plan_schId,
	t1.plan_depId,
	t1.plan_semester,
	t1.plan_name, -- 計畫名稱,
	t2.class_room, -- 班級(不重複),
	t2.class_studentNbr -- 學生人數
from (
	select class_id,
		   plan_depId,
		   plan_schId,
		   plan_semester,
		   group_concat(distinct plan_name) plan_name
	from plan
	GROUP BY class_id,
			 plan_depId,
			 plan_schId,
			 plan_semester
) t1
inner join (
	SELECT class_id,
		   group_concat(distinct concat(class_grade,'年',class_room,'班')) class_room,
		   sum(class_studentNbr) class_studentNbr
	FROM class 
	GROUP BY class_id
) t2 on t1.class_id = t2.class_id

舜~ iT邦高手 1 級 ‧ 2019-08-26 14:05:51 檢舉

t2對單純對id做group感覺沒啥意義~~
雖然沒得到想要的結果,不過分開聚合計算再join的思路到個是好點子~

我要發表回答

立即登入回答