我有一个数据库,有'产品'和链接'产品价格'表。我试图得到所有符合特定标准的“产品”的平均“产品价格”。诀窍是我不需要某一天的平均价格,而是查询分组前(包括分组当天)所有价格的合计平均价格。我可能解释得不太清楚。
例如,如果我有两个产品在第一天以100美元的价格列出,那么第一行的结果将显示“totalcount”=2和“totalsum”=200美元。如果第二天另一个价格是150美元,那么结果中现在会有两行,第二行显示“totalcount”=3,“totalsum”=350美元。
因此,查询应该将符合条件的所有记录的计数添加到它自己的日期之前。
这有道理吗?
我有一个查询,似乎做我想要的,但它是非常缓慢。我很确定这是因为我在子查询中使用了连接。
SELECT pp.created_at,
(SELECT COUNT(products_prices.id) FROM products_prices
INNER JOIN products ON products_prices.product_id = products.id
WHERE products_prices.created_at <= pp.created_at
AND products.make LIKE '%Beneteau%'
AND length_feet >= 47
AND length_feet <= 52
AND products_prices.marked_as_sold <> 1
) AS totalCount,
(SELECT SUM(products_prices.price) FROM products_prices
INNER JOIN products ON products_prices.product_id = products.id
WHERE products_prices.created_at <= pp.created_at
AND products.make LIKE '%Beneteau%'
AND length_feet >= 47
AND length_feet <= 52
AND products_prices.marked_as_sold <> 1
) AS totalSum
FROM products_prices pp
GROUP BY DAY(pp.created_at)
ORDER BY created_at
以下是此查询生成的结果。。。
created_at totalCount totalSum
2018-11-29 00:00:00 0
2018-11-30 00:00:00 0
2018-12-01 09:58:14 0
2018-12-02 04:58:13 0
2018-12-03 13:15:14 0
2018-12-04 04:45:12 0
2018-12-05 01:15:13 0
2018-12-06 10:15:13 0
2018-12-07 11:26:41 0
2018-12-08 00:00:13 2 504000
2018-12-09 01:05:07 2 504000
2018-12-10 01:05:08 2 504000
2018-12-11 00:45:12 2 504000
2018-12-12 01:00:14 2 504000
2018-12-13 01:05:08 2 504000
2018-12-14 01:18:10 2 504000
2018-12-15 00:02:13 2 504000
2018-12-16 00:45:12 2 504000
2018-12-17 00:02:13 2 504000
2018-12-18 01:05:08 2 504000
2018-12-19 00:02:14 11 2535500
2018-12-20 01:05:08 12 2724500
2018-12-21 00:02:14 13 2973500
2018-12-22 00:20:30 13 2973500
2018-12-23 01:15:06 13 2973500
2018-12-24 01:11:09 13 2973500
2018-12-25 01:28:07 13 2973500
2018-12-26 01:25:06 13 2973500
2018-12-27 00:02:09 13 2973500
2018-12-28 00:02:11 13 2973500
一定有更好的办法。有人有什么想法吗?
最新的建议是。。。
SELECT pp.created_at ,
COUNT(pp.id) totalCount,
SUM(pp.price) totalSum
FROM products_prices pp
INNER JOIN products
ON pp.product_id = products.id
GROUP BY DAY(pp.created_at)
HAVING pp.created_at <= pp.created_at
AND products.make LIKE '%Beneteau%'
AND length_feet >= 47
AND length_feet <= 52
AND pp.marked_as_sold <> 1
ORDER BY created_at;
但它抛出“未知列”产品。make'in'having子句”
1条答案
按热度按时间sy5wg1nm1#
当然-在子查询中使用联接很慢
但是mysql支持描述
我想你需要创建一些索引
like是一个非常慢的语句,在索引中非常困难
可以从以下几个方面开始:
储存起来,然后使用:
然后在产品标识、长度和英尺上创建一些索引,并将其标记为已售出