[英]How to write a SQL query?
我的数据库有一个简单的表,有两列BID和Value。 数据库中可能有一些记录具有相同的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查询?
您正在寻找聚合查询。
SELECT COUNT(*)
FROM (
SELECT BID, COUNT(*) cnt
FROM your_table
GROUP BY BID
HAVING COUNT(*) > 1
) q
此处的内部查询将您的出价分组在一起,计算每个组中的出价,然后仅选择值大于1的组。
外部查询仅计算该查询的结果。
您可以在此处查看其工作方式: http : //sqlfiddle.com/#!9/0c9e6/3
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个count
检查每个id的值计数,而对于所有具有多个值的id则需要另一个计数,您无需使用having
:
SELECT COUNT(*)
FROM (
SELECT BID, COUNT(*) CNT
FROM your_table
GROUP BY BID
) q
WHERE CNT>1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.