[SQL] MySQL은 : GROUP BY에없는
SQLMySQL은 : GROUP BY에없는
이 사이트는 결과를 생성하지만, GROUP BY는 두 개의 서로 다른 결과 수를 갖는 SELECT 수와 SELECT 쿼리와 함께. 이는 phpMyAdmin을뿐만 아니라 사이트에 표시되는 오류 가능성이 높습니다.
쿼리 :
SELECT count(DISTINCT `name`) as `numrows` FROM `users` WHERE `verified` = '1'
SELECT `name`, `type`, `language`, `code` FROM `users` WHERE `verified` = '1' GROUP BY `name` ORDER BY `count` DESC LIMIT 0, 25
phpMyAdmin에 다음과 같은 오류를 제공합니다 :
MySQL의 문서를 읽을 때, 나는 내가 해결해야 할 무엇인지 아직 불분명 해요. 나는이 파악 수없는 것.
해결법
-
==============================
1.다음과 같은 방법으로 전체 그룹이 필요합니다 :
다음과 같은 방법으로 전체 그룹이 필요합니다 :
SELECT `name`, `type`, `language`, `code` FROM `users` WHERE `verified` = '1' GROUP BY `name`, `type`, `language`, `code` ORDER BY `count` DESC LIMIT 0, 25
SQL92는 select 절에서 (집계 제외) 모든 열이 조항에 의해 그룹의 일부입니다해야합니다. SQL99 조금이 제한을 느슨하게하고, select 절에있는 모든 열이 GROUP BY 절의 기능적 의존해야한다는. 기본적으로 MySQL은에 의해 부분적으로 그룹에 대해 수 있으며,이 비 결정적 답변, 예를 생성 할 수 있습니다 :
create table t (x int, y int); insert into t (x,y) values (1,1),(1,2),(1,3); select x,y from t group by x; +------+------+ | x | y | +------+------+ | 1 | 1 | +------+------+
즉 임의의 y는 그룹 X를 선택한다. 하나는 @@ sql_mode을 설정하여이 동작을 방지 할 수 있습니다 :
set @@sql_mode='ONLY_FULL_GROUP_BY'; select x,y from t group by x; ERROR 1055 (42000): 'test.t.y' isn't in GROUP BY
-
==============================
2.이 문제를 해결하는 가장 좋은 방법은 표현에 의해 완전한 그룹을 사용, 물론입니다.
이 문제를 해결하는 가장 좋은 방법은 표현에 의해 완전한 그룹을 사용, 물론입니다.
그러나 ONLY_FULL_GROUP_BY 주위 작품 GROUP BY에 기존의 MySQL의 확장의 차단 또 다른 해결책이있다.
SELECT name, ANY_VALUE(type) type, ANY_VALUE(language) language, ANY_VALUE(code) code FROM users WHERE verified = '1' GROUP BY name ORDER BY count DESC LIMIT 0, 25
ANY_VALUE ()를 명시 적으로 조작 BY의 MySQL의 불완전 그룹에서 암시 적으로 사용하는 것을 선언 - 서버가 선택할 수, 음, 어떤, 값이 돌아갑니다.
-
==============================
3.짜증나는 'ONLY_FULL_GROUP_BY'예을 해제하는 것입니다 위의 또 다른 해결책은 여러 번 언급 이 게시물에 같이 : 안 ONLY_FULL_GROUP_BY
짜증나는 'ONLY_FULL_GROUP_BY'예을 해제하는 것입니다 위의 또 다른 해결책은 여러 번 언급 이 게시물에 같이 : 안 ONLY_FULL_GROUP_BY
나는 여러 시간 동안 전체 프로젝트를 리팩토링하지 않으려면이 솔루션은 매우 유용하다고 생각합니다. 그리고 당신은 GROUP BY 목록 아닌 컬럼의 예측할 수없는 값을 걱정하지 않는 경우.
-
==============================
4.쿼리에 대한 그냥 비활성화 엄격.
쿼리에 대한 그냥 비활성화 엄격.
-
==============================
5.우선은 그런 이유를 보는 것입니다. 다소 생략 그룹화 된 컬럼의 값이 완전히 열거하는 동안 결과에서 (예외없이 각각 하나), 다른 선택된 컬럼의 값 (들) -하지만 코드 캔 : 이전 버전은 우리가 부주의 비트를 할 수 't는 귀하를 대신하는 사람에게 (하지 않음) :
우선은 그런 이유를 보는 것입니다. 다소 생략 그룹화 된 컬럼의 값이 완전히 열거하는 동안 결과에서 (예외없이 각각 하나), 다른 선택된 컬럼의 값 (들) -하지만 코드 캔 : 이전 버전은 우리가 부주의 비트를 할 수 't는 귀하를 대신하는 사람에게 (하지 않음) :
- Hey, MYSQL, list the families of the street - but add a first name as well to every row. - Okay sir, but shall I use the father's or the mother's or...? I'm a machine, give exact orders!
우리가 다른 컬럼 (들)에 대한 환경 설정이있는 경우 우리가 결정할 수있는 이유, 이제 우리는을 이해. 사용하다
MAX() AS MIN() AS etc, works with strings, too
나 정말 모두 같은 있다면, 예를 들어, 그룹화 한 사용과 관련되어있는 집계되지 값 사이의 차이가 없다
ANY_VALUE() AS
어느 쪽이든, 당신은 MySQL은 "모호"되는 당신이있는 거 알고 알고하지만 당신은 정말 당신이 그룹화 한 (들) 이외의 모든 열에 초점을하지 않을 수 있습니다.
from https://stackoverflow.com/questions/25800411/mysql-isnt-in-group-by by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 쿼리는 SQL Server의 열을 기준으로 그룹과 함께 쉼표 구분에 집계 된 결과를 얻을 수 있습니다 (0) | 2020.03.24 |
---|---|
[SQL] 어떻게 레일과 WHERE 절에서 IN의 대신에 사용 하는가? (0) | 2020.03.24 |
[SQL] 어떻게 MySQL의에서 삭제 캐스케이드에 사용합니까? (0) | 2020.03.24 |
[SQL] 포스트 그레스에서 LIKE와의 차이 ~ (0) | 2020.03.24 |
[SQL] SQL Express를 연결 문자열 : 응용 프로그램 위치에 MDF 파일 위치에 상대적인 (0) | 2020.03.24 |