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-------------------------------------------- 我现在已经关联了所有表格“打开”相同的推荐人taxi.id 将其设置为等于其他表的变量id_taxi,现在我得到了值但错误。在@Twelf 的建议之后,我尝试评论“GROUP BY tax.id”并尝试选择 *。我现在看到的问题是结果成倍增加。示例如果我在 giornifermi 中有三行,它们变成了 6,如果我在 storico_pagamenti 中有 2 行,它会再次复制我在 storico_pagamenti 中每一行的三行。在不知道如何解决这个问题,但知道问题总比没有好
EDIT-------------------------------------------------------- 通过在left join,而不是加入整个 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