我得到了以下SQL
SELECT GEP.KOD, GEP.IRSZ, GEP.VAROS, GEP.UTCA, GEP.UGYINT, GEP.EMELET, CIKK.NEV,
GEPELEM.SZAMLALO FROM GEP LEFT JOIN CIKK ON GEP.CIKK = CIKK.KOD LEFT JOIN GEPELEM ON
GEPELEM.KOD = GEP.KOD WHERE CEG = 27013
GROUP BY GEPELEM.SZAMLALO, GEP.KOD, GEP.IRSZ, GEP.VAROS, GEP.UTCA, GEP.UGYINT, GEP.EMELET, CIKK.NEV
我想通过GEPELEM.SZAMLALO使用其可用的最大值进行分组...
如果我删除GRoup by语句并且只保留GEP.ELEM.SZAMLALO,则会出错
[Error Code: 335544569, SQL State: 42000] GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -104
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
如果我在SELECT中使用max()函数,则它什么都不做。 SQL运行,但结果不会改变 如果我按原因在组中使用max()并在select:
中[Error Code: 335544569, SQL State: 42000] GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -104
Token unknown - line 2, column 11
max
如果我仅在原因组中使用它,则会出现相同的错误。
这是firebird 1.5.6(无法升级),我来自MySQL背景。
答案 0 :(得分:2)
在JOIN条件中添加where子句而不是where子句,假设CEG在GEPELEM表中,请尝试以下内容.....
SELECT GEP.KOD
, GEP.IRSZ
, GEP.VAROS
, GEP.UTCA
, GEP.UGYINT
, GEP.EMELET
, CIKK.NEV
, MAX(GEPELEM.SZAMLALO)
FROM GEP
LEFT JOIN CIKK ON GEP.CIKK = CIKK.KOD AND GEP.CEG = 27013
LEFT JOIN GEPELEM ON GEPELEM.KOD = GEP.KOD
GROUP BY GEP.KOD
, GEP.IRSZ
, GEP.VAROS
, GEP.UTCA
, GEP.UGYINT
, GEP.EMELET
, CIKK.NEV