SELECT taxi.id as id,name,
SUM(storico_pagamenti.importo) AS pagamentitotali,
SUM(CASE WHEN storico_pagamenti.data <= '$timestop' AND storico_pagamenti.data >= '$timestart' THEN storico_pagamenti.importo ELSE 0 END) AS pagamentimese,
SUM(storico_fatture.importo) AS fatturetotali,
SUM(CASE WHEN storico_fatture.data <= '$timestop' AND storico_fatture.data >= '$timestart' THEN storico_fatture.importo ELSE 0 END) AS fatturemese,
COUNT(giornifermi.registrazione) as giornifermitotali,
SUM(CASE WHEN giornifermi.data <= '$timestop' AND giornifermi.data >= '$timestart' THEN 1 ELSE 0 END) AS giornifermimese
FROM taxi
LEFT JOIN storico_pagamenti ON taxi.id = storico_pagamenti.id_taxi
LEFT JOIN storico_fatture ON storico_pagamenti.id_taxi=storico_fatture.id_taxi
LEFT JOIN giornifermi ON storico_fatture.id_taxi=giornifermi.id_taxi
WHERE taxi.categoria='cv'
GROUP BY taxi.id;
我的mysql技能对于这个查询还不够......无法理解问题出在哪里。不起作用的部分是这个
SUM(CASE WHEN giornifermi.data <= '$timestop' AND giornifermi.data >= '$timestart' THEN 1
ELSE 0 END) AS giornifermimese
我希望在两个提交日期之间给我giornifermi.data行的计数
和另一部分:
COUNT(giornifermi.registrazione) as giornifermitotali
我希望能够给我giornifermi.registrazione
列
这是因为加入吗?或者这是查询的两个部分中的问题吗?
EDIT ----------------------------------------- 我现在已经将所有表“ON”相关的引用者taxi.id设置为等于其他表的变量id_taxi,现在我得到的值却错了。在@Twelf的建议之后我试图评论“GROUP BY taxi.id”并尝试选择*。我现在看到的问题是结果成倍增加。示例如果我在giornifermi中有三行,则它们变为6,如果我在storico_pagamenti中有2行,它会再次复制storico_pagamenti中每行的三行。在不知道如何解决这个问题,但知道问题总比没有好
EDIT ------------------------------------------ 通过在左连接后添加子查询来修复,而不是加入giornifermi的整个表,我创建了一个全新的表来更正数据而不重复
LEFT JOIN (SELECT
taxi.id as i,
COUNT(giornifermi.registrazione) as giornifermitotali,
SUM(CASE
WHEN giornifermi.data <= '$timestop' AND giornifermi.data >= '$timestart' THEN 1
ELSE 0
END) as giornifermimese
FROM taxi
LEFT JOIN giornifermi ON taxi.id=giornifermi.id_taxi
GROUP BY taxi.id
) AS NUOVATABELLA ON taxi.id=NUOVATABELLA.i
答案 0 :(得分:1)
从你的问题中无法分辨,但是对于“错误”的基本故障排除:
JOIN
,那么它可能不足JOIN
条件,IE笛卡尔积。WHERE
条件或限制性JOIN
条件排除您不想要的记录。更新
您的一个或多个表包含所有/某些taxi_ID
值的多个条目。
为每个表运行:
SELECT taxi_ID
FROM storico_pagamenti
GROUP BY taxi_ID HAVING COUNT(*) > 1
如果任何表返回记录,请查看它们以查看是否应在JOIN
中使用另一个字段来区分重复项。