最高计数与一组

时间:2014-05-29 00:36:35

标签: sql sql-server sql-server-2012

我有一个绝对的大脑褪色

SELECT p.ProductCategory, f.ProductSubCategory, COUNT(*) AS Cnt
FROM Sales f
JOIN Products p ON f.ProductSubCategory = p.ProductSubCategory
GROUP BY p.ProductCategory, f.ProductSubCategory
ORDER BY 1,3 DESC

这显示了每个ProductSubCategory的计数,我希望每个ProductCategory只能看到最高的ProductSubCategory。

enter image description here

我希望看到(我不关心Count值)

enter image description here

2 个答案:

答案 0 :(得分:3)

有几种不同的方法可以做到这一点。一种方法是将结果反馈给自己并使用max聚合。但是,由于您使用的是SQL Server,因此可以使用ROW_NUMBER来获得相同的结果:

with cte as (
    select p.productcategory, p.ProductSubCategory, COUNT(*) cnt, 
        ROW_NUMBER() over (partition by p.productcategory order by count(*) desc) rn 
    from products p 
        join sales s on p.ProductSubCategory = s.ProductSubCategory
    group by p.productcategory, p.ProductSubCategory
    )
select * 
from cte 
where rn = 1

答案 1 :(得分:1)

您已经得到了答案,请参阅以下代码。它可能对你有帮助。

SELECT  p.ProductCategory, 
        f.ProductSubCategory,
        COUNT(*) AS Cnt
FROM    Sales f
JOIN    Products p ON f.ProductSubCategory = p.ProductSubCategory
JOIN    (
        SELECT  p.ProductCategory, 
                f.ProductSubCategory, 
                ROW_NUMBER() OVER ( PARTITION BY    p.ProductCategory,
                                                    f.ProductSubCategory 
                                    ORDER BY COUNT(*) DESC) [Row]
        FROM    Sales f
        JOIN    Products p ON f.ProductSubCategory = p.ProductSubCategory) Lu 
        ON      P.ProductCategory = Lu.ProductCategory
        AND     f.ProductSubCategory = Lu.ProductSubCategory
WHERE   Lu.Row = 1
GROUP   By  p.ProductCategory, 
            f.ProductSubCategory