Error: Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
Error: Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
我正在使用 Firebird SQL。下面提到的查询returns 4行如图。
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
我希望它 return 只有 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)
学习使用正确、明确的 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;
注意:我还建议您对 table 别名使用 table 缩写。因此,ep
代表 TBLEXAMPLANNER_S_MSB
而不是 a
。任意 table 别名使查询难以理解。
GROUP BY
的使用使引擎组为您记录。要进行分组,您必须向 each 列的 RDBMS 提出建议,它应该做什么。
- 群呢? -> 添加列到
GROUP BY-Clause
- 不会组吗? -> 好的,还有什么?
- 忽略该列?从你的 select-clause
中删除它
- 求和吗? -> 使用
SUM(mycol)
- 其他聚合函数可以在documentation
中找到
此外:在您的情况下,您尝试按 EPS_ID
分组,这在每一行中都是唯一的。因此,该列的 分组 将 return 所有行,因为没有可分组的依据。要对记录进行分组,它们必须具有 相同的 值。
尝试
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
我正在使用 Firebird SQL。下面提到的查询returns 4行如图。
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
我希望它 return 只有 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)
学习使用正确、明确的 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;
注意:我还建议您对 table 别名使用 table 缩写。因此,ep
代表 TBLEXAMPLANNER_S_MSB
而不是 a
。任意 table 别名使查询难以理解。
GROUP BY
的使用使引擎组为您记录。要进行分组,您必须向 each 列的 RDBMS 提出建议,它应该做什么。
- 群呢? -> 添加列到
GROUP BY-Clause
- 不会组吗? -> 好的,还有什么?
- 忽略该列?从你的 select-clause 中删除它
- 求和吗? -> 使用
SUM(mycol)
- 其他聚合函数可以在documentation 中找到
此外:在您的情况下,您尝试按 EPS_ID
分组,这在每一行中都是唯一的。因此,该列的 分组 将 return 所有行,因为没有可分组的依据。要对记录进行分组,它们必须具有 相同的 值。
尝试
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