表1中有學生編號,上課最多次數,上最多的一門課。表2中有課程編號,這門課屬於的專業編號,這個專業屬於的學院學院編號。表3裡面有學生編號,學生以前最喜歡課程。怎麼編寫sql查詢學生編號stu_id,上課最多次數num,上的最多的一門課class_id,這門課是否是以前最喜歡的課0 or 1,如果不是以前最喜歡的課那是否屬於同一個專業0 or 1,如果不屬於同一個專業是否屬於同一個學院0 or 1
回覆列表
-
1 # Joey83441417
-
2 # 逗逼老碼農
沒有環境,而且不知道你是什麼資料庫。不能敲程式碼。只能給你說大致思路。
首先表1和表2透過學生id關聯,取出學生上課最多的課以及課所屬專業,院系(暫時稱為資料集a)。然後表3和表2透過學生id關聯,取出學生最喜歡的課以及所屬專業,院系(稱為資料集b),最後a和b透過學生id關聯,判斷專業是否相同,院系是否相同。得出最終需要的結果集。
不同資料庫,SQL語法會有些差異,我以Oracle資料庫為例,表結構如下圖:
查詢SQL參考如下:
SELECT A.STU_ID "學生ID",
A.MAX_CLASS_CNT "最大上課次數",
A.MAX_CLASS_ID "次數最多課程",
DECODE(B.CLASS_ID,C.CLASS_ID,1,0) "是否最喜歡課程",
CASE WHEN B.CLASS_ID<>D.CLASS_ID THEN DECODE(B.ZHUANYE_ID,D.ZHUANYE_ID,1,0) END "是否同一專業",
CASE WHEN B.CLASS_ID<>D.CLASS_ID AND B.ZHUANGYE_ID<>D.ZHUANGYE_ID THEN DECODE(B.XUEYUAN_ID,D.XUEYUAN_ID,1,0) END "是否同一學院"
FROM STU_LES_LOG A
LEFT JOIN CLASS_INFO B
ON A.MAX_CLASS_ID=B.CLASS_ID
LEFT JOIN STU_INFO C
ON A.STU_ID=B.STU_ID
LEFT JOIN CLASS_INFO D
ON C.FAV_CLASS_ID=D.CLASS_ID