作者darkk6 (CJV)
看板Database
標題[SQL ] 如何在篩選條件中加入某欄位不重複的資訊
時間Wed Jul 6 16:25:03 2011
問題可能有點小複雜:
我有一個 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
1F:推 howardandy:把上面當子查詢 group by 後 count 然後排序count 07/06 16:34
※ 編輯: darkk6 來自: 122.123.80.153 (07/06 16:37)
2F:→ howardandy:當子查後排序由大到小,取第一行uid 07/06 16:41
3F:推 FireLake:既然你只需要知道最多是多少筆 把 COUNT(u_id) 改成 07/08 08:38
4F:→ FireLake:COUNT(distinct(note)) 就好了 07/08 08:42