【问题标题】:Display the city name which has most number of branches显示分支机构最多的城市名称
【发布时间】:2017-11-21 09:29:24
【问题描述】:

我已尝试获取分支机构最多的城市名称。

select C.City_name ,count(B.B_Name) 
from tblcity C
inner join
tblBranch B
on c.city_id=B.City_id
group by C.City_name
order by count(B.B_Name) desc

上面的代码会给我特定城市的分支机构数量。 请帮我解决获得分支机构最多的城市名称

【问题讨论】:

  • 我觉得你需要SELECT TOP 1 ...??

标签: sql sql-server join group-by count


【解决方案1】:

您可以在查询中添加TOP 1

select TOP 1 C.City_name ,count(B.B_Name) 
from tblcity C
inner join
tblBranch B
on c.city_id=B.City_id
group by C.City_name
order by count(B.B_Name) desc

【讨论】:

  • Top 1 将给出一个最佳结果。但其他城市也可以有相同的计数。结果失败的地方。
  • @sampathacharya 在这种情况下您可以使用TOP 1 WITH TIES。但是仍然存在使用密集等级的论点,例如如果您还想获得第二高,等等。
  • @sampathacharya 我了解到,根据您的问题,您只想要一个城市。如果您以复数形式提出问题,我也可以添加 WITH TIES。如果你想得到正确的答案,你应该问正确的问题。
【解决方案2】:

使用DENSE_RANK():

SELECT
    City_Name, cnt
FROM
(
    SELECT
        c.City_name,
        COUNT(b.B_Name) cnt,
        DENSE_RANK() OVER (ORDER BY COUNT(b.B_Name) DESC) dr
    FROM tblcity c
    INNER JOIN tblBranch b
        ON b.city_id = c.City_id
    GROUP BY c.City_name
) t
WHERE dr = 1;

在这里使用TOP 1 WITH TIES 是另一种选择,但这是特定于 SQL Server 的。

【讨论】:

  • 关于 c.city=b.city_id
猜你喜欢
  • 1970-01-01
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多