从子查询中提取具有最大计数的状态

时间:2018-02-22 06:03:06

标签: sql sql-server

Select a.states,MAX(a.cnt) from 

(Select ci_location.state as states,Count(CI_Location.State) Cnt from 
Fact_Transactions ft
Inner join CI_Location on ft.ID_Location = CI_Location.ID_Location
Where id_model like 'smsg%'
Group by State)a

Group by a.states,a.Cnt

输出: -

State       Count

Alabama      7
Arizona      15
Arkansas     4
California   100
Colorado     7



   Required output:-

    state    output
    California 100

此代码不是从我的表中提取具有最大计数值的STATE ...有问题吗?

3 个答案:

答案 0 :(得分:0)

尝试以下

SELECT TOP 1 -- or TOP 1 WITH TIES
  ci_location.state as states,
  Count(CI_Location.State) Cnt
FROM Fact_Transactions ft
INNER JOIN CI_Location ON ft.ID_Location = CI_Location.ID_Location
WHERE id_model like 'smsg%'
GROUP BY ci_location.state
ORDER BY Cnt DESC

答案 1 :(得分:0)

您应该使用row_number()函数方法来获取最大计数状态

SELECT * FROM
(
   SELECT
         l.state as states,
         Count(l.State) as Cnt,
         row_number() over (order by Count(l.State) desc) Sq
   FROM Fact_Transactions ft
   INNER JOJN CI_Location l on ft.ID_Location = l.ID_Location
   WHERE l.id_model like 'smsg%'
   GROUP BY l.State
) a
WHERE sq = 1

注意:对于当前查询,您将进一步对派生表结果进行分组。尝试删除GROUP BY条款&只需使用max()即可获得最高计数状态。

答案 2 :(得分:0)

只需通过

删除组中的a.cnt

中选择a.states,MAX(a.cnt)

(选择ci_location.state作为状态,Count(CI_Location.State)Cnt来自 Fact_Transactions ft ft.ID_Location = CI_Location.ID_Location上的内连接CI_Location 其中id_model喜欢'smsg%' 按国家分组)

按a.states分组