从SubQuery获取最大值

时间:2013-06-20 12:34:14

标签: sql tsql

我对TSql的帮助不大:)

SELECT TOP (100) PERCENT HSW, NAZWA, COUNT(HSW) AS TEST 
FROM _Katalogi.dbo.ZBIOR_NAZW 
WHERE hsw = '3768917680' 
GROUP BY HSW, NAZWA

现在我得到了这个结果

3768917680  PODKŁADKA UTWARDŹ.          1
3768917680  ŚRUBA SAMOZABEZPIECZJĄCA    1
3768917680  PODKŁADKA                  82
3768917680  PODKŁADKA 3/8"              1
3768917680  PODKŁADKA UTWARDZONA     2883
3768917680  ŚRUBA                       2

现在在这个子查询中,我只需要

3768917680  PODKŁADKA UTWARDZONA         2883

最大COUNT(HSW)AS TEST

我瘦我问有点不对

SELECT TOP (100) PERCENT HSW, NAZWA, COUNT(HSW) AS TEST 
FROM _Katalogi.dbo.ZBIOR_NAZW 
GROUP BY HSW, NAZWA

目标只是从HSW专栏的gropuing表中获得顶级NAZWA。就像你看到一点点我有一个HSW号码和许多名字,我只需要获得最流行的名字:)但在一个HSW组内。有许多hsw数字,有很多不同的名字,我只需要有TOP名称的HSW号码列表:)任何想法?

不同的aproach :) 表格中的数据

3768917680  PODKŁADKA UTWARDŹ.          
3768917680  ŚRUBA SAMOZABEZPIECZJĄCA    
3768917680  PODKŁADKA                  
3768917680  PODKŁADKA                  
3768917680  PODKŁADKA                  
3768917680  PODKŁADKA 3/8"              
3768917680  PODKŁADKA UTWARDZONA     
3768917680  ŚRUBA                       
3768917681  PODKŁADKA UTWARDŹ.          
3768917681  PODKŁADKA UTWARDŹ.  
3768917681  ŚRUBA SAMOZABEZPIECZJĄCA    
3768917682  PODKŁADKA                  
3768917683  PODKŁADKA 3/8"              
3768917684  PODKŁADKA UTWARDZONA     
3768917684  ŚRUBA                       
3768917684  ŚRUBA

就像你看到这是在emess所以我只需要得到什么是goo所以组中最流行的名字

3768917680  PODKŁADKA

3768917681  PODKŁADKA UTWARDŹ. 

3768917682  PODKŁADKA                  

3768917683  PODKŁADKA 3/8"

3768917684  ŚRUBA

所以目标采用顶级(最受欢迎)名称

的一个hsw数字

3 个答案:

答案 0 :(得分:3)

SELECT  *
FROM    (
        SELECT  ROW_NUMBER() OVER (PARTITION BY HSW ORDER BY CNT DESC) rn
        ,       *
        FROM    (
                SELECT  COUNT(*) OVER (PARTITION BY HSW, NAZWA) as CNT
                ,       *
                FROM    FROM _Katalogi.dbo.ZBIOR_NAZW 
                ) as SubQuery1
        ) as SubQuery2
WHERE   rn = 1 -- Only top CNT per HSW

答案 1 :(得分:2)

这样的东西?

SELECT HSW, NAZWA, COUNT(HSW) AS TEST 
FROM _Katalogi.dbo.ZBIOR_NAZW 
WHERE hsw = '3768917680' 
GROUP BY HSW, NAZWA
HAVING  COUNT(HSW) = 
(
    SELECT TOP 1 COUNT(HSW) AS TEST 
    FROM _Katalogi.dbo.ZBIOR_NAZW 
    WHERE hsw = '3768917680' 
    GROUP BY HSW, NAZWA
    ORDER BY COUNT(HSW) DESC
)

答案 2 :(得分:0)

您还可以使用分析函数基于COUNT创建RowRank,如果存在平局,则会获取所有结果,并且效果良好。

如果您想要所有HSW的最佳结果,而不仅仅是列出的那个,您可以使用:

SELECT HSW, NAZWA, TEST
FROM (
     SELECT  HSW, NAZWA, COUNT(HSW) AS TEST, Rank() OVER (PARTITION BY HSW ORDER BY COUNT(HSW) DESC) as RowRank
     FROM _Katalogi.dbo.ZBIOR_NAZW 
     GROUP BY HSW, NAZWA
     )sub
WHERE RowRank = 1

演示:SQL Fiddle

如果你不想在平局的情况下获得多个结果,将RANK()更改为ROW_NUMBER(),那么每个HSW只会选择1。

编辑:缺少')'