我对 sql 进行了查询,但它真的很重,我真的不知道如何优化它,解释如下:
SELECT tyds.user_tyd,
tyds.product_tyd,
tyds.action_tyd,
products.price_product,
data_8,
data_9,
avg_8,
sum_9
FROM tyds
INNER JOIN products
ON tyds.product_tyd = products.id_product
INNER JOIN (SELECT product_tyd,
Avg(data_tyd) AS avg_8
FROM tyds
WHERE action_tyd = 8
GROUP BY product_tyd) Agg_1
ON Agg_1.product_tyd = tyds.product_tyd
INNER JOIN (SELECT product_tyd,
Sum(data_tyd) AS sum_9
FROM tyds
WHERE action_tyd = 9
GROUP BY product_tyd) Agg_2
ON Agg_2.product_tyd = tyds.product_tyd
INNER JOIN (SELECT product_tyd,
data_tyd AS data_8
FROM tyds
WHERE user_tyd = 3
AND action_tyd = 8) Agg_3
ON Agg_3.product_tyd = tyds.product_tyd
INNER JOIN (SELECT product_tyd,
data_tyd AS data_9
FROM tyds
WHERE user_tyd = 3
AND action_tyd = 9) Agg_4
ON Agg_4.product_tyd = tyds.product_tyd
WHERE tyds.user_tyd = 3
AND tyds.action_tyd = 1
GROUP BY tyds.product_tyd
所有这些联合是因为我需要得到很多东西:我在 tyds.user_tyd = 3 tyds.action_tyd = 1 中定义了一个 id_user,因为我想按 tyds.product_tyd 分组,其中前一个 id_user 作为 tyds.action_tyd = 1。
然后我想要: -data_8 是 tyds.data_tyd 的值 WHERE user_tyd = 3 AND action_tyd = 8 -data_9 相同
- 对于 AVG 和 COUNT,我想跳过 tyds.user_tyd 条件,只按 id_product 分组。
实际上,这个查询正在工作,但我认为它真的很重并且选择太多......
一个月前我提出了一个类似的问题,但我不得不审查我的架构,所以我很抱歉......
非常感谢。
e1:我使用 MySQL