繁体   English   中英

如何编写SQL查询?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM