我的数据库有一个简单的表,有两列,BID和Value。数据库中可能有一些记录具有相同的BID,如下所示:
BID值
Record1: BID = 1, Value = 0
Record2: BID = 1, Value = 3
Record3: BID = 2, Value = 4
Record4: BID = 2, Value = 5
Record5: BID = 2, Value = 6
Record6: BID = 3, Value = 7
现在我想写一个SQL查询,它可以获得具有多个相应记录的BID的总数。
在上面的示例中,BID 1有2个相应的记录,BID 2有3个。因此,具有多个相应记录的BID值的总数为2。
如何编写这样的SQL查询?
答案 0 :(得分:2)
您正在寻找汇总查询。
SELECT COUNT(*)
FROM (
SELECT BID, COUNT(*) cnt
FROM your_table
GROUP BY BID
HAVING COUNT(*) > 1
) q
此处的内部查询将您的出价组合在一起,计算每个组中的出价数量,然后仅选择价值超过1的组。
外部查询只计算该查询的结果。
您可以在此处查看其工作原理:http://sqlfiddle.com/#!9/0c9e6/3
答案 1 :(得分:0)
declare @t table (bid int,val int)
insert into @t (bid,val)values (1,0),(1,3),(2,4),(2,5),(2,6),(3,7)
;with cte as (
select bid,
val,ROW_NUMBER()OVER(PARTITION BY bid order by val )RN from @t
)
select COUNT( DISTINCT bid) from cte
where RN > 1
答案 2 :(得分:0)
您只需要2 count
一个用于检查每个ID的值计数,另一个用于具有多个值的所有ID,您不需要使用having
:
SELECT COUNT(*)
FROM (
SELECT BID, COUNT(*) CNT
FROM your_table
GROUP BY BID
) q
WHERE CNT>1