如何编写SQL查询?

时间:2015-04-02 06:42:58

标签: mysql sql sql-server

我的数据库有一个简单的表,有两列,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查询?

3 个答案:

答案 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