我有一个类似于这样的查询
SELECT
t.category,
tc.product,
tc.sub-product,
count(*) as sales
FROM tg t, ttc tc
WHERE t.value = tc.value
GROUP BY t.category, tc.product, tc.sub-product;
现在在我的查询中,我想获取每个类别的前10个产品(按销售额排名),并且对于每个类别,我需要前5个子类别(按销售额排名)。
您可以将问题陈述假设为以下内容:
按销售额获取每个类别的前10个产品,并针对每个产品按销售额获取前5个子产品。
这里的类别可以是书籍,产品可以是《哈利波特》书,子产品可以是哈利波特系列5。
示例输入数据格式:
category |product |subproduct |Sales [count (*)]
abc test1 test11 120
abc test1 test11 100
abc test1 test11 10
abc test1 test11 10
abc test1 test11 10
abc test1 test11 10
abc test1 test12 10
abc test1 test13 8
abc test1 test14 6
abc test1 test15 5
abc test2 test21 80
abc test2 test22 60
abc test3 test31 50
abc test3 test32 40
abc test4 test41 30
abc test4 test42 20
abc test5 test51 10
abc test5 test52 5
abc test6 test61 5
|
|
|
bcd test2 test22 10
xyz test3 test31 5
xyz test3 test32 3
xyz test4 test41 2
输出将是“”。
top 5 rf for (abc) -> abc,test1(289) abc,test2 (140), abc test3 (90), abc test4(50) , abc test5 (15)
top 5 rfm for (abc,test1) -> test11(260),test12(10),test13(8),test14(6),test15(5) and so on
我的查询失败了,因为结果非常庞大。我正在了解 Oracle 分析函数,例如 rank。有人能帮我使用分析函数修改这个查询吗?其他方法也可以。
我参考了 http://www.orafaq.com/node/55 ,但是无法得到正确的 SQL 查询语句。
任何帮助都将不胜感激... 我已经困在这里两天了 :(
MySql
还是Oracle
的解决方案? - The Scrum Meister