MySQL的Group By分組

壹頁書發表於2014-05-21
一直以來,還是Oracle用的比較多。
MySQL的分組,看著總是有些奇怪。
實驗如下,建立初始化資料:
  1. create table sod_artist_category_relation(
  2.     songid int ,
  3.     CategoryID int
  4. );
  5. insert into sod_artist_category_relation values (1,1),(1,2),(1,3),(2,3),(2,4),(3,1);

假設這是歌曲和歌曲分類的對映表,一個歌曲可以有多個分類,比如"華語"和"男歌星"。
MySQL可以進行如下分組:
  1. select songid,CategoryID,count(*) from sod_artist_category_relation group by songid;

他除了正常的分組,還可以帶上其他的欄位,如果這些額外的欄位有重複,則選擇第一個資料。

這個特性很方便,如果使用Oracle,可以使用相關子查詢模擬,
  1. select songid,
  2. (select min(CategoryID) from sod_artist_category_relation where songid=t1.songid) CategoryID,
  3. count(*) from sod_artist_category_relation t1 group by songid;




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1166158/,如需轉載,請註明出處,否則將追究法律責任。

相關文章