错误:选择列表中的表达式无效(未包含在聚合函数或GROUP BY子句中)
我正在使用Firebird SQL。下面提到的查询返回4行,如图所示。错误:选择列表中的表达式无效(未包含在聚合函数或GROUP BY子句中)
SELECT a.EPS_ID,b.C_NAME,c.AY_YR_NAME,d.S_NAME,e.E_NAME
FROM
TBLEXAMPLANNER_S_MSB a,
TBLCLASS_MSB b,
TBLACADEMICYEAR_MSB c,
TBLSUBJECTS_MSB d,
TBLEXAMTYPE_MSB e
WHERE
a.EPS_CLASS_ID=b.C_ID
AND a.EPS_SESSION_ID=c.AY_ID
AND a.EPS_SUB_ID=d.S_ID
AND a.EPS_PE_ID=e.E_ID
我希望它仅仅返回1(一)像
EPS_ID C_NAME AY_YR_NAME S_NAME E_NAME
---------------------------------------------------
7 5 2016-2017 English FA1
我使用下面的查询行,但它不工作。
SELECT a.EPS_ID,MAX(b.C_NAME) AS XT,c.AY_YR_NAME,d.S_NAME,e.E_NAME
FROM
TBLEXAMPLANNER_S_MSB a,
TBLCLASS_MSB b,
TBLACADEMICYEAR_MSB c,
TBLSUBJECTS_MSB d,
TBLEXAMTYPE_MSB e
WHERE
a.EPS_CLASS_ID=b.C_ID
AND a.EPS_SESSION_ID=c.AY_ID
AND a.EPS_SUB_ID=d.S_ID
AND a.EPS_PE_ID=e.E_ID
GROUP BY a.EPS_ID,d.S_NAME
的错误信息是:
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
使用GROUP BY
使发动机组记录为你。要进行分组,你必须给RDBMS建议每个列,它应该做什么。
- 集团呢? - >向
GROUP BY-Clause
添加列 - 不是分组吗? - >好的,还有什么?
- 忽略列?从你的select-clause中删除它
- 总结一下吧? - >使用
SUM(mycol)
- 其他聚合函数可以在documentation
另外发现:在你的情况,你通过EPS_ID
,这是每行中唯一尝试组。因此,按该列分组的分组将返回所有行,因为没有任何内容需要分组。要对记录进行分组,他们必须具有与相同的值。
了解如何使用正确的,明确的JOIN
语法。
您的问题是所有不聚集列必须在GROUP BY
:
SELECT a.EPS_ID, MAX(b.C_NAME) AS XT, c.AY_YR_NAME, d.S_NAME, e.E_NAME
FROM TBLEXAMPLANNER_S_MSB a JOIN
TBLCLASS_MSB b
ON a.EPS_CLASS_ID = b.C_ID JOIN
TBLACADEMICYEAR_MSB c
ON a.EPS_SESSION_ID = c.AY_ID JOIN
TBLSUBJECTS_MSB d
ON a.EPS_SUB_ID = d.S_ID JOIN
TBLEXAMTYPE_MSB e
ON a.EPS_PE_ID = e.E_ID
GROUP BY a.EPS_ID, c.AY_YR_NAME, d.S_NAME, e.E_NAME;
注:我也建议你使用表缩写表的别名。所以,ep
为TBLEXAMPLANNER_S_MSB
而不是a
。任意表别名使查询很难遵循。
谢谢@戈登,但它仍然显示我4行,如附图所示 –
尝试
SELECT a.EPS_ID,c.AY_YR_NAME,d.S_NAME,e.E_NAME,MAX(b.C_NAME) AS XT ...
GROUP BY 1,2,3,4
虽然这段代码可能有助于解决问题,但它并没有解释_why_和/或_how_它回答了这个问题。提供这种附加背景将显着提高其长期教育价值。请[编辑]您的答案以添加解释,包括适用的限制和假设。 –
你尝试SELECT DISTINCT – gherkin
我也不能够让DISTINCT工作与我的查询:( –
由于错误消息说,您需要列表提供给中使用任何列' “GROUP BY”表达式中的SELECT列表(不是聚合) – oals