2017-12-16 13 views
1

각 사용자에 대해 몇 가지 데이터가있는 기본 키 - 값 테이블이 있습니다. 업데이트 된 mysql을 사용하면 그룹을 만들 때 sql_modeonly_full_group_by (새 기본값)으로 설정됩니다. 나는 다음과 같은 오류 얻을only_full_group_by를 사용하여 쿼리 그룹을 수정하는 방법

select * from user_features 
where user_id = 1 
group by feature_key 

: :이 간단한 쿼리를 실행하려고하면이 예제 데이터로

SQL Error (1055): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'date.user_features.user_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

을, 나는이 feature_key (I는 한 번 group_concat 추가됩니다에 따라 그룹화 할 그룹 오류가 수정 됨).

| user_id | feature_key | feature_value | 
+---------+-------------+---------------+ 
| 1  | color  | red   | 
+---------+-------------+---------------+ 
| 1  | age   | 15   | 
+---------+-------------+---------------+ 
| 1  | color  | blue   | 
+---------+-------------+---------------+ 

표는 다음과 같습니다

CREATE TABLE `user_features` (
    `user_id` int(10) unsigned NOT NULL, 
    `feature_key` varchar(50) NOT NULL, 
    `feature_value` varchar(50) NOT NULL, 
    UNIQUE KEY `user_id_feature_key_feature_value` (`user_id`,`feature_key`,`feature_value`) 
) 

나는이 문제를 해결하기 위해 실행할 수있는 또는 무엇 지수 (들) 내가 추가 할 필요가 무엇 쿼리?

+0

그래서 이전에이 대답? 빨간색이나 파란색? –

+0

그룹이 없으면 어떤 색을 묻는거야? 확실하지 않은 질문을 이해합니다. 죄송합니다. –

+0

mysql의 이전 버전이 <5입니다.7 당신이 색깔에 대한 가치를 얻을 수있는 가치와 가치를 반환 할 것으로 기대하는이 그룹은 정상적인 동작이며 다른 RDBMS에 비해 MySQL을 너무 늦게 채택했습니다 –

답변

3

이것은 MySQL 사용자에게 일반적인 오류입니다. MySQL 5.7에서는 기본적으로 데이터베이스가 다른 대부분의 SQL 데이터베이스가 수년간 시행해온 표준 의미를 적용합니다.

규칙은 선택 목록의 모든 열 중 하나 여야한다는 것입니다 : GROUP BY 절에 명명 된

  • ; 즉 그룹화 대상입니다.
  • 과 같은 집계 함수 안에 그룹화 할 열에 따라 기능이 다릅니다 (표준 SQL 동작에 대한 MySQL의 확장이며 다른 SQL 데이터베이스 반드시 이것을 지원하는 것은 아닙니다). 당신은 feature_key에 의해 그룹화되어

    select user_id, feature_key, feature_value from user_features 
    where user_id = 1 
    group by feature_key 
    

    , 그러나 이것은 다른 열이 나는 위에서 설명한 규칙을 준수하지 않는 의미 : 조회에서

는 (나는 당신의 SELECT * 확장 것)을.

select MAX(user_id), feature_key, GROUP_CONCAT(feature_value) 
from user_features 
where user_id = 1 
group by feature_key 

WHERE 절 조건에 따라 하나의 값만 수 있기 때문에 그것은 MAX(user_id)를 사용하여 중복 보일 수 있습니다 :

는 여기를 해결하는 방법입니다. 그러나 아무런 해가 없습니다. MIN(user_id)도 사용할 수 있습니다.

이 같은 오류에 또한 나의 과거 대답을 참조하십시오 : 당신이하는 당신이 주요 색상 얻을 주어진 값 그룹을 수행 할 때