如何在事实表中获得总产品的前N个最大值

时间:2011-06-21 16:59:55

标签: sql database plsql

我有一个典型的星型模式来模拟真实但简单的DW。我的事实表是SALES,除了其他产品外,它还有一些属性,如amount_sold,quantity_sold(每个产品),单价等。

现在我需要在Weka中引入一些数据来进行数据挖掘研究,其中我想要描述购买前3种产品的人的特征。所以,我需要,也许是一个辅助表,其中包含销售中的所有不同产品,以及为每一个销售的total_quantity。

AUX_TOTAL_PROD_SOLD将是这样的:

Collumn_1= prod_id
Collumn_2= total_sold

因此,为此目的,我需要:
1-一个PL / SQL程序来填充我的aux_Table
2-获得3个(或其他数量)最畅销的产品

我只需要找到它们然后我就可以将每个prod_id与购买它的客户联系起来。

你认为这是一种复杂的方式,还是你认为或有更好的想法?

我正在测试它,但如果可以,我会欣赏一些代码/伪代码。

提前谢谢

这就是我能够实现这一目标的方式:

SELECT * from
(SELECT prod_ID, SUM(s_quantity_sold) as TOTAL_SOLD
FROM SALES 
GROUP BY prod_ID
ORDER BY SUM(s_quantity_sold) DESC )
where ROWNUM <=3

它就像一个魅力:)

1 个答案:

答案 0 :(得分:1)

SELECT TOP 3 Product_ID, SUM(quantity_sold) AS total_sold
FROM [SALES]
GROUP BY Product_ID
ORDER BY SUM(quantity_sold) DESC

或SQL Server

DECLARE @n int

SET @n  = 3

SELECT TOP (@n) Product_ID, SUM(quantity_sold) AS total_sold
FROM [SALES]
GROUP BY Product_ID
ORDER BY SUM(quantity_sold) DESC