我正在使用一个名为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))
但我发现我完全不知道自己在做什么。有没有办法使用基本命令和子查询来解决这个问题?
供参考,我们仅使用表CustomerNum
中的列1000,1001,1002
(Rentals
等)。我正在尝试找到CustomerNum
在表Rentals
中出现次数最多的客户。我正在考虑使用子查询来首先计算每个customernum在表中出现的次数,然后找到计数最高的customernum。
答案 0 :(得分: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
答案 1 :(得分:0)
您不需要相关的子查询来处理您正在做的事情。这是基于您的查询的一种方式:
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上使用top
或row_number()
的方法。