2014-09-03 70 views
0

我得到了下面的SQL火鸟1.5:集团通过最大值

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组...
如果我用语句删除组和只有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) 

如果我使用MAX()函数在SELECT导致它什么都不做。在SQL运行,但结果并没有改变
如果我在组中使用MAX()的原因,在选择:

[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背景。

+1

“我想利用其通过GEPELEM.SZAMLALO组最大值可用“。我不明白你想做什么。尝试用样本数据和期望的结果编辑问题。 – 2014-09-03 12:11:22

回答

2

添加的where子句中的JOIN条件,而不是在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 
+0

CEG在GEP表格中,但它工作正常,但我不明白它为什么起作用......请你解释一下吗? – NaGeL182 2014-09-03 12:22:23

+0

当你在一个只存在于一个表中的列上使用一个外部联接并过滤掉where条件的某些行时,它将为另一个表为null,因此它基本上将你的外部联接转换为内部联接,同时你也希望Max列,然后您尝试将该列添加到您的组中,如果您希望列的最大值/最小值/平均值,您将按照选择查询中的所有列进行分组,除了您在任何聚合函数Min/Max/Avg/Sum/Count ..... – 2014-09-03 12:29:28

+0

@ M.Ali我不认为将'CEG'移动到连接条件是正确的(现在所有的'GEP'行都会返回,而不是只返回'CEG = 27013')。 MAX的加入可能是所有必要的。 – 2014-09-03 12:34:36