Re: [SQL ] 多重欄位值序列或組合的複合搜尋

看板Database作者 (三天)時間13年前 (2010/09/24 14:35), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/5 (看更多)
※ 引述《danny0838 (道可道非常道)》之銘言: : 舉例來說,資料結構如下: : 學生ID 志願序 志願大學 志願科系 : ------------------------------------ : 1 1 台大 醫學系 : 1 2 台大 電機系 : 1 3 台大 法律系 : 1 4 陽明 醫學系 : ... : 1 10 長庚 醫學系 : 2 1 台大 數學系 : 2 2 ... ... : ... : 現在要下 SQL 指令去找: : 1.所有符合志願大學含有(包括以上)2個台大,1個陽明,1個長庚的學生 比較簡單做法是先把學生ID跟志願大學做GROUP 接著篩選出 COUNT(志願科系) > 條件的資料 接著在做判斷,比較笨的做法就是把這些篩選出來的資料 把三個都符合的學生資料撈出來 SQL語法像是 =========================================================== SELECT * FROM ( SELECT 學生ID FROM 資料表 GROUP BY 學生ID, 志願大學 HAVING (志願大學 = '台大' AND COUNT(志願科系) >= 2) or (志願大學 = '陽明' AND COUNT(志願科系) >= 1) or (志願大學 = '長庚' AND COUNT(志願科系) >= 1) ) as tempTb GROUP BY tempTb.學生ID HAVING COUNT(學生ID) >= 3 ============================================================ 假如是MSSQL的話用PIVOT可以比較直覺 SELECT * FROM (SELECT 學生ID, 志願大學, 志願科系 FROM 資料表 ) as sourceTb PIVOT( COUNT(志願科系) FOR 志願大學 IN ([台大], [陽明], [長庚]) )tempTb WHERE 台大 >= 2 AND 長庚 >=1 AND 陽明 >= 1 ============================================================ 應該有更好的做法,這兩個做法都是BY CASE去做 擴充性跟彈性都不足 僅止於參考 : 2.所有符合志願大學按志願序排列含有 台大-台大-長庚-陽明 的學生 : 允許跳號,比如以下這位 X 學生符合: : 學生ID 志願序 志願大學 志願科系 : ------------------------------------ : X 1 台大 XXX : X 2 北醫 XXX : X 3 清大 XXX : X 4 台大 XXX : X 5 交大 XXX : X 6 輔仁 XXX : X 7 長庚 XXX : X 8 成大 XXX : X 9 陽明 XXX : 請教各位大大怎麼下 SQL 指令? : PS:schema 未定,以上只是初步的藍圖,有必要可以改。 : PS2:我是使用 MySQL 這個CASE必須表示必須要考慮到順序 ? -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.184.107
文章代碼(AID): #1Cd4Qhh3 (Database)
討論串 (同標題文章)
文章代碼(AID): #1Cd4Qhh3 (Database)