寻找前10名的记录,我会用表结构前言:MySQL的 - 按月
收入分成R:包含用于购买包括orderNo,销售,佣金,商品ID信息,EVENTDATE
产品号码:包含的信息围绕包含PID(产品ID)的产品,用于加入商户表以获取商家信息。
招商L:包含有关商家的产品从购买,包括MERCHANTNAME
信息问题
我想创建一个MySQL查询拉排名前10位的itemid的有序佣金的总和给定月份。我希望得到的整个数据集是2011-2013年,因此每年将填充120个记录(每月10个)。
我创建了一个查询来提取1个月的数据,并计划使用UNION ALL来创建一个记录列表,每个查询包含10条记录(每个查询代表一个月前10位的itemid)。
查询1
该查询返回准确我根据在给定的月期间这些项目的总佣金前10名的itemid的。
SELECT
m.MerchantName,
Count(r.OrderNo),
sum(r.commission)
FROM revshare r
LEFT JOIN Products p ON r.itemid = p.PID
LEFT JOIN Merchants m ON p.MID = m.MID
WHERE r.EventDate between '2011-01-01' and '2011-01-31'
GROUP by r.itemid
ORDER by 3 DESC LIMIT 10
当我尝试UNION此查询与另一个,这样我可以得到“2011-02-01”之间下个月记录和“2011年2月31日”我得到的和错误“错误:不正确使用UNION和ORDER BY“我知道这是因为显然你不能在任何一组UNION查询中使用ORDER BY,而是使用ORDER BY。我可以提取整个数据集,然后使用Excel或Pentaho BI仅显示前10位,但基于revshare表中庞大的数据集无效。
以下是查询UNION ALL不起作用。有没有人有更好的方法来提取这些数据?
任何帮助,非常感谢。
问候, 克里斯
查询2既然你已经开始下降的union
ING查询路径一起
SELECT
m.MerchantName,
Count(r.OrderNo),
sum(r.commission)
FROM revshare r
LEFT JOIN Products p ON r.itemid = p.PID
LEFT JOIN Merchants m ON p.MID = m.MID
WHERE r.EventDate between '2011-01-01' and '2011-01-31'
GROUP by r.itemid
ORDER by 3 DESC LIMIT 10
UNION ALL
SELECT
m.MerchantName,
Count(r.OrderNo),
sum(r.commission)
FROM revshare r
LEFT JOIN Products p ON r.itemid = p.PID
LEFT JOIN Merchants m ON p.MID = m.MID
WHERE r.EventDate between '2011-02-01' and '2011-02-31'
GROUP by r.itemid
ORDER by 3 DESC LIMIT 10
你打电话 “以便通过3”。指令顺序正在查找列名称。 – 2013-03-20 20:56:42
没有指令顺序使用列位置或列名称,这不是问题。问题在于UNION情况下的指令顺序。所以我可以说“ORDER BY 3”或“ORDER BY r。佣金”,这意味着同样的事情。 – 2013-03-21 19:03:47
学习新的东西每一天。 – 2013-03-21 19:41:07