Re: [SQL ] SQL(MySQL)中 實現自動分組編號

看板Database作者 (巧虎)時間9年前 (2015/02/27 09:55), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《JeremyJoung (J.J.)》之銘言: : 這是工作中遇到的問題 : 我需要一個分組的自動流水編號 : 每個GROUP都需要從1開始自動編號 : 由於 INSERT UPDATE過程中 無法參考自我查詢 : 所以無法巢狀自己查自己 : 如果說 另外開一個COUNT表或VIEW : 在批次INSERT 或UPDATE時 : COUNT表不會自動更新 必須一筆一筆處理 這樣很沒效率 : 請問有沒有什麼方法可以實現 純粹SQL指令的分組自動編號 : 我目前慣用環境是MySQL 但是希望其他SQL也可以適用 : 所以Oracle sequence 暫時先跳過 使用以下例子來說明, 假設有一資料表employee, 欄位有department(部門)、name(姓名)、age(年齡), 紀錄資料如下: department name age ---------- ---------- ---------- IT Hank 50 IT Cris 30 IT John 45 HR Tina 22 HR Alex 25 HR Tom 48 IT James 33 Market Joana 27 Market Jane 25 Market Joe 36 今天的需求為,依照各部門人員的年齡來做分組編號,年齡越大者編號越小, 若有同年齡者,則以姓名的自然排序來決定編號。 結果為: department name age idx ---------- ---------- ---------- ---------- HR Jack 48 1 HR Tom 48 2 HR Alex 25 3 HR Tina 22 4 IT Hank 50 1 IT John 45 2 IT James 33 3 IT Cris 30 4 Market Joe 36 1 Market Joana 27 2 Market Jane 25 3 SQL: select t2.*,(select count(*) from employee as t1 where (t1.age > t2.age or t1.age = t2.age and t1.name <= t2.name) and t1.department = t2.department group by t1.department) as idx from employee as t2 order by 1,4; 我是使用SQLite來做示範,沒使用到特殊的function,所以應該可適用其他的資料庫。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 115.43.68.94 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1425002156.A.BA7.html
文章代碼(AID): #1Kxywikd (Database)
文章代碼(AID): #1Kxywikd (Database)