顯示廣告
隱藏 ✕
※ 本文為 dinos.bbs. 轉寄自 ptt.cc 更新時間: 2012-07-25 09:24:27
看板 Database
作者 TeemingVoid (TeemingVoid)
標題 Re: [SQL ] 分組取前五
時間 Wed Jul 25 01:34:37 2012


※ 引述《b60413 (None)》之銘言:
: 我想要做一個查詢是分組取前五的動作,
: 資料庫的結構大致如下,
: id      t_type    frequency
: 1       a       10
: 2       b       15
: 3       c       20
: 4       a       5
: 5       b       1
: 目前的做法我是使用分開查詢的方式去做,然後再自行將結果合併,如下
: SELECT * FROM test WHERE t_type LIKE 'a' ORDER BY frequency DESC LIMIT 5
: SELECT * FROM test WHERE t_type LIKE 'b' ORDER BY frequency DESC LIMIT 5
: SELECT * FROM test WHERE t_type LIKE 'c' ORDER BY frequency DESC LIMIT 5
: 有試著使用GROUP BY的功能去達到精簡,
: 不過一直試不出來正確的語法,
: 請問有沒有人有更漂亮的寫法可以提供?

請參考這樣的寫法,如此,可以一次處理全部的類別:

SELECT * FROM test t
  WHERE ( SELECT COUNT(*) FROM test
          WHERE t_type = t.t_type and frequency >= t.frequency
        ) <= 5
  ORDER BY t_type, frequency DESC

像「每組第一」、「各組前 N 筆」這類的題型,下列這篇文章有詳盡的解說:
http://ppt.cc/r7FZ
一併提供給您參考。 :)

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.170.134.191

--
※ 看板: dinos 文章推薦值: 0 目前人氣: 0 累積人氣: 347 
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇