2

我想编写一个查询,只允许我获取我想要的特定数据,仅此而已。

我们将以电视为例。我有三个品牌的电视,我想看看每个品牌的销量前十名。我只想返回 30 行。一种解决方案是工会,但这会很快变得混乱。理想情况下,会有一个 WHERE ROWNUM 按情况分组。

SELECT 
    A.Brand
,   A.Model
,   A.Sales
FROM 
(   SELECT
        TV.Brand
    ,   TV.Model 
    ,   SUM(TV.SALES) AS SALES
    FROM TV_TABLE as TV
    ORDER BY 
        TV.Brand
    ,   SALES DESC
)   A
WHERE ROWNUM <10 

在我上面的代码中,我将从内部查询中获得前 10 个总结果,但不是每个分组中的 10 个。

我想看到的是这样的:

品牌:型号:销售
索尼:x10:20
索尼:X20:18
索尼:X30:10
VISIO:A40:40
VISIO:A20:10

这是一个过于简单的示例,实际上我需要进行 20-50 次摸索,并且希望避免下载所有数据并使用 Pivot 功能。

4

2 回答 2

5
 select Brand, Model, SALES
 from(
    select Brand, Model, SALES,row_number()over(partition by Brand order by SALES desc) rn
    from (
        SELECT TV.Brand, TV.Model,SUM(TV.SALES) AS SALES,
        FROM TV_TABLE as TV
        group BY TV.Brand,TV.Model
    )a
)b
where rn <= 10
于 2013-07-29T17:28:26.827 回答
0
SELECT TV.Brand, TV.Model, SUM(TV.SALES) AS SALES
FROM TV_TABLE TV
group by TV.Brand, TV.Model
order by SUM(TV.SALES) desc, TV.Brand
limit 30
于 2013-07-29T17:44:50.560 回答