[SQL ] 如何在篩選條件中加入某欄位不重複的資訊

看板Database作者 (CJV)時間13年前 (2011/07/06 16:25), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串1/1
問題可能有點小複雜: 我有一個 table 叫做 ULM ULM 裡面有一個欄位是 note #### 和 @ 基本上沒什麼問題可以不必理會 ULM 裡面每個使用者的一些紀錄,這句 query 的目的是要計算在 f=@ 和 c_id=#### 的條件下 哪一個 u_id 擁有最多筆資料,主要是取出 最多筆的是多少,而不是要知道哪個 u_id select COUNT(u_id) as len from ULM where c_id = #### and f = @ and u_id in ( 'AAA' , 'BBB' , 'CCC' ) group by u_id order by len DESC (之後再取得第一筆資料就知道是多少了) 我現在想要的部份是,在計算每個 u_id 有幾筆資料的時候 要排除掉 note 裡面資料相同的部分 舉個例子 原本的 query 到最後取出的值是 6,因為 D 和 A 各有六筆資料 (參考底下白字的部份) 可是我要在計算數量的時候,把 note 重複的部份排除 也就是紅色字的部份我是不要的,那麼計算出來的 就應該要是 5 (因為 D 的資料有 5 筆) 那我該怎麼在這個 query 裡面加上條件呢? 謝謝!! u_id note -------------- A 1 A 2 A 3 A 4 A 4 <-- 不算 A 4 <-- 不算 B 11 B 12 B 13 B 14 C 21 C 22 C 23 C 24 D 31 D 32 D 33 D 34 D 35 D 35 <-- 不要 因為這個 query 不是我自己寫的,是接手寫的頁面 要以這個為基礎下去改... 之前試過 DISTINCT,可是這好像只針對要取出的資料 可是 note 不是我要取出的資料... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.123.80.153

07/06 16:34, , 1F
把上面當子查詢 group by 後 count 然後排序count
07/06 16:34, 1F
※ 編輯: darkk6 來自: 122.123.80.153 (07/06 16:37)

07/06 16:41, , 2F
當子查後排序由大到小,取第一行uid
07/06 16:41, 2F

07/08 08:38, , 3F
既然你只需要知道最多是多少筆 把 COUNT(u_id) 改成
07/08 08:38, 3F

07/08 08:42, , 4F
COUNT(distinct(note)) 就好了
07/08 08:42, 4F
文章代碼(AID): #1E51lY1q (Database)