>  Q&A  >  본문

"SELECT 문의 집계되지 않은 열은 GROUP BY 절에 나타나지 않으며 sql_mode=only_full_group_by와 호환되지 않습니다."

<p>내 Windows PC에서 WAMP 서버와 함께 MySQL 5.7.13을 사용하고 있습니다</p> <p>이 쿼리를 실행할 때 문제가 발생합니다</p> <pre class="brush:php;toolbar:false;">SELECT * `tbl_customer_pod_uploads`에서 여기서 `load_id` = '78' AND `상태` = '활성' GROUP BY `proof_type`</pre> <p>항상 이런 오류가 발생합니다</p> <인용문> SELECT 목록의 표현식 #1은 GROUP BY 절에 없으며 집계되지 않은 열 'returntr_prod.tbl_customer_pod_uploads.id'를 포함합니다. 이 열은 GROUP BY 절의 열에 대한 기능적 종속성이 없습니다. sql_mode=only_full_group_by는 호환되지 않습니다</p> </인용문> <p>가장 좋은 해결책을 알려주세요. </p> <p>나에게 필요한 결과는 다음과 같습니다</p> <pre class="brush:php;toolbar:false;">+----+---------+---------+--------- ---------------+------------+---+------- --- ----+---------------+------------+---------+----- --- -------------+---------+ | id | load_id | langitude | 파일명 | +------+---------+---------+---------+---------+--- ------+---+---------------+--------- ------- ---+---+---------+------------- -------+--- ----+ 1 | 1 | 78 | 1 | 2017-01-27 11:30:14 | +------+---------+---------+---------+---------+--- ------+---+---------------+--------- ------- ---+---+---------+------------- -------+--- -----+</pre> <p><br /></p>
P粉034571623P粉034571623426일 전494

모든 응답(2)나는 대답할 것이다

  • P粉523625080

    P粉5236250802023-08-21 10:10:51

    MySQL 엔진에는 시스템 변수 ONLY_FULL_GROUP_BY가 있습니다.

    MySQL 버전 5.7.5부터 : SQL 모드는 기본적으로 활성화됩니다 ONLY_FULL_GROUP_BY.

    버전 5.7.5 이전 : 기본적으로 활성화되어 있지 않습니다 ONLY_FULL_GROUP_BY.

    SQL 모드가 활성화된 경우(버전 5.7.5부터 기본적으로 활성화됨), MySQL은 쿼리 선택 목록, HAVING 조건 또는 non을 참조하는 ORDER BY 목록을 거부합니다. -집계 열, 이 열은 GROUP BY 절에 이름이 지정되지 않았으며 해당 기능과도 관련이 없습니다. ONLY_FULL_GROUP_BY SQL模式(从5.7.5版本开始默认启用),MySQL将拒绝查询选择列表、HAVING条件或ORDER BY列表引用非聚合列,这些列既不在GROUP BY

    이 문제를 해결하려면 다음 세 가지 해결 방법 중 하나를 사용하세요

    (1) PHPMyAdmin

    Disabled: 모드ONLY_FULL_GROUP_BY

    phpMyAdmin을 사용하는 경우 아래 스크린샷에 따라

    sql_mode 설정을 변경하세요.

    sql 모드 변수를 편집하고 값에서

    textsql mode变量并从值中删除ONLY_FULL_GROUP_BY를 제거합니다.

    또는

    (2) SQL/명령 프롬프트

    다음 명령을 실행하여 비활성화합니다: mode. ONLY_FULL_GROUP_BY 으아악

    또는

    (3) SELECT *을 사용하지 마세요.

    모드를 비활성화하지 말고 대신 ONLY_FULL_GROUP_BY

    등) 열 SELECT查询中使用相关列。相关列指的是在group by子句中出现的列或带有聚合函数(MAXMINSUMCOUNT


    중요 팁

    을 사용하여 변경한 사항은 영구적인 설정이 아니며 재부팅할 때마다 복원됩니다. 点(1)或点(2)

    따라서 MySQL을 다시 시작해도 변경 사항이 적용되도록 구성 파일(예:

    파일)에서 이를 설정해야 합니다. [mysqld]部分的/etc/mysql/my.cnf

    프로필: /etc/mysql/my.cnf

    변수 이름: sql_mode sql-mode 또는

    sql-mode

    값에서 ONLY_FULL_GROUP_BY

    단어를 제거하고 파일을 저장하세요.

    참고sql_mode:

    변수가 구성 파일에 없으면 파일 끝에 다음 2줄을 삽입하세요🎜 으아악

    회신하다
    0
  • P粉121081658

    P粉1210816582023-08-21 00:49:48

    이 문제는 다음 명령을 사용하여 MySQL에서 SQL 스키마를 변경하면 간단히 해결할 수 있습니다.

    으아악

    나에게도 효과가 있어...

    제 프로젝트에 비슷한 쿼리가 많아서 이 방법을 사용했는데, 그냥 sql 모드를 only_full_group_by로 변경했습니다.

    또는 단순히 GROUP BY 절의 SELECT 문으로 지정된 모든 열을 포함합니다. sql_mode는 활성화된 상태로 남아 있을 수 있습니다.

    감사합니다... :-)


    업데이트 날짜: 2023년 7월 14일

    SQL 스키마를 변경하는 것이 해결 방법 중 하나이지만 구조화된 쿼리 언어의 모범 사례는 모든 (SELECT *...) 열을 선택하지 않고 대신 @Tim Biegeleisen이 아래에서 수행하는 것처럼 그룹화된 열에 집계 함수를 사용하는 것입니다. 답변에서 언급됨 https://stackoverflow.com/a/41887524/3602846

    회신하다
    0
  • 취소회신하다