Mysql 发生数据库错误。选择列表的表达式2不在GROUP BY子句中,并且包含未聚合的列

Mysql 发生数据库错误。选择列表的表达式2不在GROUP BY子句中,并且包含未聚合的列,mysql,sql,database,Mysql,Sql,Database,我有这个疑问 SELECT substring(TGLLAHIR, 1, 7) as TGLLAHIR_, substring(TGLLAHIR, 5, 2) as BULAN, `TGLLAHIR` as `TGL` FROM `m_pasien` WHERE substring(TGLLAHIR,1,4) = '2013' GROUP BY substring(TGLLAHIR, 1, 7) ORDER BY `TGLLAHIR` ASC 但是消息显示错误 SELECT

我有这个疑问

SELECT substring(TGLLAHIR, 1, 7) as TGLLAHIR_,
       substring(TGLLAHIR, 5, 2) as BULAN, `TGLLAHIR` as `TGL`
FROM `m_pasien` 
WHERE substring(TGLLAHIR,1,4) = '2013' 
GROUP BY substring(TGLLAHIR, 1, 7) 
ORDER BY `TGLLAHIR` ASC
但是消息显示错误

SELECT列表的表达式2不在GROUP BY子句中,并且包含未聚合的列“rsukemba_kojarsuk.m_pasien.TGLLAHIR”,该列在功能上不依赖于GROUP BY子句中的列;这与sql\u mode=only\u full\u group\u by不兼容

如何解决此问题?

您不需要分组方式,而是使用distinct


在这个查询中,您似乎误用了GROUPBY子句。分组方式在聚合数据时很有用。例如,如果您有一个帐户、日期和存款金额表;如果你想知道每个账户在所有日期的存款总额,你可以这样写

select account, sum(deposits)
    from some_table
    group by account
仅从您的问题来看,不清楚您到底在尝试做什么,甚至更难,因为您的命名奇怪的变量是在没有任何上下文的情况下列出的。但是可以肯定地说,您不需要在此处使用组,所以只需将其删除即可

另外,除非您知道要扔掉什么,并且确定不需要它,否则我会小心使用select distinct。您应该使用任何值聚合函数来抑制此警告消息并使查询可运行。MySQL不知道应该在结果集中包含非聚合字段的哪个值。不属于GROUP BY子句的每个字段都应包装在聚合函数中,如下所示:

SELECT substring(TGLLAHIR, 1, 7) as TGLLAHIR_,
       substring(TGLLAHIR, 5, 2) as BULAN, 
ANY_VALUE(`TGLLAHIR`) as `TGL`
FROM `m_pasien` 
WHERE substring(TGLLAHIR,1,4) = '2013' 
GROUP BY substring(TGLLAHIR, 1, 7) 
ORDER BY `TGLLAHIR` ASC

以下是MySQL参考资料中对这一点的解释:

我认为这个问题是由于MySQL版本中启用了严格模式造成的。请禁用严格模式并重试

要检查是否启用了严格模式,请运行以下sql:

SHOW VARIABLES LIKE 'sql_mode';
set global sql_mode='';
如果其中一个值是STRICT\u TRANS\u TABLES,则启用STRICT模式

要禁用严格模式,请运行以下sql:

SHOW VARIABLES LIKE 'sql_mode';
set global sql_mode='';

请重试。

您不理解错误消息的哪一部分?我似乎很清楚。你为什么一开始就用一个团员?您没有在查询中使用任何聚合。分组方式在你的查询中毫无意义。你能告诉我为什么吗?TGLLAHIR是一个日期,我只是想采取一年SQL是不容易喘息。