作者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