2

我正在使用一个名为 SQLfire 的程序进行编码,我不完全确定我们使用的是什么版本,但我被告知它需要与 SQL Server 2008 一起使用。

这是我正在尝试做的事情:

select CustomerNum, max(count(CustomerNum))
from Rentals
group by CustomerNum

我知道如何正确实施的max(count())问题已经被多次回答,但是,我还没有找到任何可以使用 SQLfire 解决它的方法。所以,我尝试使用相关的子查询来解决它,如下所示:

select CustomerNum, count(CustomerNum)
from Rentals R
group by CustomerNum
having count(CustomerNum) =
    (select max(CustomerNum)
    from Rentals
    having count(CustomerNum) = count(R.CustomerNum))

但我发现我完全不知道自己在做什么。有没有办法使用基本命令和子查询来解决这个问题?

作为参考,我们仅使用 table 中的列CustomerNum( 1000,1001,1002etc) Rentals。我试图找到CustomerNum在 table 中出现次数最多的客户Rentals。我正在考虑使用子查询首先计算每个客户编号出现在表中的次数,然后找到计数最高的客户编号。

4

2 回答 2

1

您正在做的事情不需要相关子查询。这是基于您的查询的一种方法:

select CustomerNum, count(CustomerNum)
from Rentals R
group by CustomerNum
having count(CustomerNum) = (select max(cnt)
                             from (select CustomerNum, count(CustomerNum) as cnt
                                   from Rentals
                                   group by CustomerNum
                                  ) rc
                            );

我倾向于将子查询移动到from子句并使用子查询:

select rc.*
from (select CustomerNum, count(CustomerNum) as cnt
      from Rentals R
      group by CustomerNum
     ) rc join
     (select max(cnt) as maxcnt
      from (select CustomerNum, count(CustomerNum) as cnt
            from Rentals
            group by CustomerNum
           ) rc
     ) m
     on rc.cnt = m.maxcnt;

这些是标准 SQL,应该在两个系统中都可以使用。在实践中,我可能会找到一种在 SQL Server 2008 上使用topor的方法。row_number()

于 2013-09-11T12:16:43.453 回答
0
select r.* 
from Rentals r
right join (select CustomerNum, Max(cnt) from (
   select CustomerNum, Count(CustomerNum) cnt from Rentals Group by CustomerNum) tt) t on r.CustomerNum = t.CustomerNum
于 2013-09-11T12:07:50.663 回答