我想写一个查询,只允许我获取我想要的特定数据,仅此而已。
我们将以电视为例。我有三个品牌的电视,我希望看到每个品牌的十大畅销机型。我只想要返回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个gropings,并且希望避免下载所有数据并使用Pivot功能。
答案 0 :(得分: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
答案 1 :(得分: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