我尝试在2个表上返回group_concat 一个是我的学校名单,另一个是一些数字数据。
对于某些日期,我在SimpleData表中根本没有数据,因此我的lEFT OUTER JOINS返回10个结果,其中我有11所学校(我也需要11行javascript处理)
这是我的查询(告诉我是否需要提供有关表的更多详细信息
SELECT A.nomEcole,
A.Compteur,
IFNULL(SUM(B.rendementJour), '0') AS TOTAL,
B.jourUS,
B.rendementJour
FROM ecoles A LEFT OUTER JOIN SimpleData B ON A.Compteur = B.compteur
WHERE jourUS LIKE '2013-07-%'
GROUP BY ecole
在这个例子中,我在本月的SimpleData中没有数据(根本没有记录数据)
我必须显示NULL或' 0'对于这所失踪的学校而言,我开始对一些简单的事情开始失去理智:(
感谢您的帮助!
奥利弗
答案 0 :(得分:2)
@Abhik Chakraborty 提到了一种方法,其中将过滤掉与条件不符的记录,另一种方法是使用CASE
语句
SELECT A.nomEcole,
A.Compteur,
SUM(CASE WHEN jourUS LIKE '2013-07-%' THEN B.rendementJour ELSE 0 END) AS TOTAL,
B.jourUS,
B.rendementJour
FROM ecoles A
LEFT OUTER JOIN SimpleData B ON A.Compteur = B.compteur
GROUP BY ecole
答案 1 :(得分:2)
我怀疑你只需要将where
条件移到on
子句:
SELECT A.nomEcole, A.Compteur, IFNULL(SUM(B.rendementJour), 0) AS TOTAL,
B.jourUS, B.rendementJour
FROM ecoles A LEFT OUTER JOIN
SimpleData B
ON A.Compteur = B.compteur and b.jourUS >= '2013-07-01' and b.jourUS < '2013-08-01'
GROUP BY A.ecole;
其他一些变化:
like
用于日期。 like
是对字符串而不是日期的操作,日期必须隐式转换为字符串。相反,请直接比较您感兴趣的日期范围。e
代替A
代替ecoles
。)另请注意,您为JourUS
和RendementJour
返回的值不确定。如果B
表中有多个匹配的行,则返回任意值。也许你想要max()
或group_concat()
。
答案 2 :(得分:0)
您的WHERE子句将LEFT OUTER JOIN转换为INNER JOIN,因为外连接记录值为NULL且NULL永远不会像LIKE&#39; 2013-07 - %&#39;。
这就是你必须将jourUS LIKE '2013-07-%'
移到ON子句的原因,因为你只想加入jourus LIKE&#39; 2013-07 - %&#39;否则外连接空记录。