Mysql OrderSubquery与第二个表组合

Mysql OrderSubquery与第二个表组合,mysql,subquery,Mysql,Subquery,我有两张桌子: 1) product data 2) sales stats of these products 在表2中,我有每天每种产品的销售统计数据。我想得到过去30天最畅销的产品。我通过以下问题意识到了这一点: SELECT sku FROM prod_history WHERE insert_date >= SUBDATE(CURDATE(), INTERVAL 31 DAY) GROUP BY sku ORDER BY SUM(number_of_orders) DES

我有两张桌子:

1) product data
2) sales stats of these products
在表2中,我有每天每种产品的销售统计数据。我想得到过去30天最畅销的产品。我通过以下问题意识到了这一点:

SELECT sku
FROM    prod_history
WHERE insert_date >= SUBDATE(CURDATE(), INTERVAL 31 DAY)
GROUP BY sku
ORDER BY SUM(number_of_orders) DESC 
LIMIT 0, 10
此查询大约需要4.5秒

现在我想将这个查询结果与产品数据表1连接起来

我对此使用以下查询,但得到的结果不正确。 我收到的结果往往不是最畅销的产品

有没有办法在一次查询中得到所需的结果

亲切问候,,
Max

内部查询在上个月内获得十种最畅销的产品,但外部查询在没有任何订单的情况下仅限制五种。如果您将内部查询限制为5,则应该将其修复

以下是查询的联接版本:

SELECT `prod_combined`.`sku`, `prod_combined`.`titel`, `prod_combined`.`preis_vk`, `prod_combined`.`link`
FROM `prod_combined` 
INNER JOIN `prod_history`
ON prod_combined.sku = prod_history.sku
WHERE prod_history.insert_date >= SUBDATE(CURDATE(), INTERVAL 31 DAY) 
  AND prod_combined.aktiv = 1
GROUP BY `prod_combined`.`sku`, `prod_combined`.`titel`, `prod_combined`.`preis_vk`, `prod_combined`.`link`
ORDER BY SUM(prod_history.number_of_orders) DESC
LIMIT 5

我只是觉得在你的第二个问题中你的活动顺序是错的。。。i、 你从一个产品开始,然后鉴定它。如果我要走这条路,我会使用where not exists子句;数量大于我的产品数量的x sku不存在

但是,您是否有理由不能将产品数据与原始数据合并

SELECT a.sku, a.titel, a.preis_vk, a.link, SUM(b.number_of_orders) as number_of_orders 
FROM prod_combined as a inner join 
     prod_history as b on a.sku = b.sku
WHERE b.insert_date >= SUBDATE(CURDATE(), INTERVAL 31 DAY)
GROUP BY a.sku, a.titel, a.preis_vk, a.link
ORDER BY SUM(b.number_of_orders) DESC 
LIMIT 0, 10

或者沿着这些思路。

虽然你的头衔吸引了某些人的自尊心,但我认为应该修改一下,以更好地反映你的问题..完成;希望我现在能找到一个人@MaxSchindler我也从标题中删除了MySQL。。。人们已经知道这是一个MySQL问题,因为您已经将其标记为这样的问题…谢谢!这正是我想要的。我知道我自己的查询没有正常工作,但速度要快得多。我能做些什么,以获得更快的结果吗?您的查询大约需要34秒;你有没有试着在最初的内部查询中设置限制5?你是对的。再一次我改变了它,使两个极限相等,这样它就工作了。
SELECT a.sku, a.titel, a.preis_vk, a.link, SUM(b.number_of_orders) as number_of_orders 
FROM prod_combined as a inner join 
     prod_history as b on a.sku = b.sku
WHERE b.insert_date >= SUBDATE(CURDATE(), INTERVAL 31 DAY)
GROUP BY a.sku, a.titel, a.preis_vk, a.link
ORDER BY SUM(b.number_of_orders) DESC 
LIMIT 0, 10