【问题标题】:Firebird 1.5 : Group by maximum valueFirebird 1.5:按最大值分组
【发布时间】:2014-09-03 12:09:59
【问题描述】:

我得到了以下 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 并且只保留 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():

[Error Code: 335544569, SQL State: 42000]  GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -104
Token unknown - line 2, column 11
max

如果我只在 Group by Cause 中使用它,也会出现同样的错误..

这是firebird 1.5.6(没有选择升级),我来自MySQL背景。

【问题讨论】:

  • “我想使用可用的最大值按 GEPELEM.SZAMLALO 进行分组”。我不明白你想做什么。尝试使用示例数据和所需结果编辑问题。

标签: sql firebird


【解决方案1】:

在您的 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

【讨论】:

  • CEG 在 GEP 表中,但它起作用了,但我不明白它为什么起作用...请您解释一下吗?
  • 当您使用外连接并过滤出仅存在于一个表中的列的 where 条件中的某些行时,另一个表将为空,因此它基本上将您的外连接转换为内连接, 你也想要一列的最大值,然后你试图将该列添加到你的 Group by 中,如果你想要一列的 Max/Min/Avg,你将按选择查询中的所有列进行分组,除了你使用过的那些在任何聚合函数中 Min/Max/Avg/Sum/Count .....
  • @M.Ali 我认为将CEG 移动到连接条件在这里是不正确的(现在将返回GEP 的所有行,而不仅仅是CEG = 27013 的行)。可能只需要添加MAX
  • @M.Ali 谢谢!是的,我添加了 max 并将其从 group by 子句中删除,使其工作!多亏了你的解释,我现在也知道为什么了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
相关资源
最近更新 更多