故事:我有一个 mysql 表,我通过下面的查询获得了 3 个值(总和)。查询正在运行。但它需要 7.624 秒,对我来说太长了。只是想找到一个更好的 sql 查询。你能帮帮我吗?
SELECT
DATE(a.tarih),
(
SELECT
SUM(s.stoplam)
FROM
siparis s
WHERE
s.durum_id IN (4, 26, 27, 28, 29)
AND DATE(s.tarih) = DATE(a.tarih)
) AS iptal,
(
SELECT
SUM(c.stoplam)
FROM
siparis c
WHERE
c.durum_id NOT IN (4, 26, 27, 28, 29)
AND DATE(c.tarih) = DATE(a.tarih)
) AS Ciro,
(
SELECT
SUM(d.stoplam)
FROM
siparis d
WHERE
d.durum_id NOT IN (4, 26, 27, 28, 29)
AND DATE(d.tarih) = DATE_ADD(
DATE(a.tarih),
INTERVAL - 30 DAY
)
) AS GCiro
FROM
siparis a
WHERE
DATE(a.tarih) > DATE_ADD(CURDATE(), INTERVAL - 30 DAY)
GROUP BY
DATE(a.tarih)
最佳答案
我认为使用条件聚合可以更轻松地做到这一点,除了第三个总和:
SELECT DATE(a.tarih),
SUM(CASE WHEN s.durum_id IN (4, 26, 27, 28, 29) THEN s.stoplam ELSE 0 END) as iptal,
SUM(CASE WHEN s.durum_id NOT IN (4, 26, 27, 28, 29) THEN s.stoplam ELSE 0 END) as Ciro,
(SELECT SUM(d.stoplam)
FROM siparis d
WHERE d.durum_id NOT IN (4, 26, 27, 28, 29) AND
DATE(d.tarih) = DATE_ADD(DATE(a.tarih), INTERVAL - 30 DAY)
) AS GCiro
FROM siparis a
WHERE DATE(a.tarih) > DATE_ADD(CURDATE(), INTERVAL - 30 DAY)
GROUP BY DATE(a.tarih);
关于Mysql - 来自 1 个表的 3 个单独的总和 - 工作 - 搜索更好的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26676187/