我在执行此特定查询时遇到问题。我已经测试,发现有一个时间极大的浪费,得到的,因为其具有“OR”这些指令的查询。
请不要质疑我需要的信息,这是无法协商的。 我试图使用别名( “Suma_Bondiolas S / hueso”)命名,但我不可能。
感谢您的推荐。
在这里,你有3个东西。 1)在Heidi中查询的照片。 2)sql代码。 3)查询结果。
1)代码图像,可加快理解速度。
2)代码:
SELECT (ELT(WEEKDAY(fecha) + 1, 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo')) AS Día_Semana
,fecha AS 'Fecha_Desposte'
,IFNULL(ROUND((
SELECT sum(kilos)
FROM rindes
WHERE (producto = 1625 OR producto = 1725 OR producto = 1695 OR producto = 1732 OR producto = 2001 OR producto = 2201)
AND fecha=Fecha_Desposte
),2),0) AS 'Suma_Bondiolas s/hueso'
,IFNULL(ROUND((
SELECT sum(kilos)
FROM rindes
WHERE (producto = 1427 OR producto = 1527 OR producto = 1695 OR producto = 1698)
AND fecha=Fecha_Desposte
),2),0) AS 'Suma_huesos_Bondiola'
,( SELECT sum(kilos)
FROM rindes
WHERE (producto = 1625 OR producto = 1725 OR producto = 1695 OR producto = 1732 OR producto = 2001 OR producto = 2201)
AND fecha=Fecha_Desposte
)/(SELECT sum(kilos)
FROM rindes
WHERE (producto = 1427 OR producto = 1527 OR producto = 1695 OR producto = 1698)
AND fecha=Fecha_Desposte
) as 'Huesos Bondiola/Bondiolas sin huesos'
FROM rindes
WHERE fecha >='2018-10-29' AND fecha <= '2019-01-30'
GROUP BY Fecha_Desposte
ORDER BY Fecha_Desposte DESC
3)结果:
答案 0 :(得分:0)
看起来像是条件聚合的候选者:
SELECT `Dia_Semana`, `Fetcha_Deposte`
, IFNULL(ROUND(`Suma_Bondiolas s/hueso`, 2), 0) AS `Suma_Bondiolas s/hueso`
, IFNULL(ROUND(`Suma_huesos_Bondiola`, 2), 0) AS `Suma_huesos_Bondiola`
, `Suma_Bondiolas s/hueso` / `Suma_huesos_Bondiola` AS `Huesos Bondiola/Bondiolas sin huesos`
FROM (
SELECT ELT(WEEKDAY(fecha) + 1, 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo') AS `Día_Semana`
, fecha AS `Fecha_Desposte`
, SUM(CASE WHEN producto IN (1625,1725,1695,1732,2001,2201) THEN kilos ELSE 0 END) AS `Suma_Bondiolas s/hueso`
, SUM(CASE WHEN producto IN (1427,1527,1695,1698) THEN kilos ELSE 0 END) AS `Suma_huesos_Bondiola`
FROM rindes
WHERE fecha >='2018-10-29' AND fecha <= '2019-01-30'
GROUP BY Fecha_Desposte, `Día_Semana`
) AS subQ
ORDER BY Fecha_Desposte DESC
;
请注意,此子查询格式不是严格必需的,但可以避免为最后一列重复前两个求和表达式。
此外,如果使用的产品ID值是数据的一小部分,则将AND producto IN ([all product ids in both sum expressions])
添加到subQ的WHERE中也可以加快速度。我听说最近的MySQL版本已经对IN
运算符进行了一些优化,但是我不确定它是否现在可以利用索引。但如果添加条件,则值得尝试为(fecha, producto)
编制索引。