2017-01-04 3 views
5

가능한 값의 쉼표로 구분 된 목록 인 하나의 열이있는 테이블이 있습니다. 각 가능한 개별 값별로 그룹화하여 쿼리하고 싶습니다.GROUP BY 절에 CASE 문을 넣는 방법

테스트로서, 나는이 쿼리를 작성했습니다 :

SELECT 
    `Please_identify_which_of_the_following_classroom_hardware_you_c2`, 
    count(`_How_would_you_rate_your_overall_skill_in_using_educational_tec1`) as count, 
    `_How_would_you_rate_your_overall_skill_in_using_educational_tec1` 
FROM 
    `data_Copy_of_Faculty_survey_on_technology_in_the_classroom_Respo` 
GROUP BY 
    `_How_would_you_rate_your_overall_skill_in_using_educational_tec1`, 
    CASE 
     WHEN `Please_identify_which_of_the_following_classroom_hardware_you_c2` LIKE '%Elmo%' THEN 'Elmo' 
    END 

나는 CASE 문이 믿을 수 없을만큼 유용하지 알고

(그들은 자동 생성있어, 열 이름을 용서하시기 바랍니다) 이 시점에서 쿼리를 실행하려고합니다. 오류가 발생합니다.

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'THEN 'Elmo' END' at line 10

내게는 잘못된 것이 무엇인지 찾아 낼 수 없습니다. 모든 통찰력은 인정 될 것이다.

편집 : 큰 따옴표를 사용하여 시도했습니다. 사용 된 인용문과 관계없이 동일한 문제가 발생했습니다.

업데이트 : Mark가 지적한 것처럼이 쿼리를 구문 분석해도 결과는 내가 찾지 못할 것입니다. 나는 이것이 왜 해석되지 않는지 여전히 궁금하지만 쿼리는 나의 초기 문제에 대한 해결책이 아니다.

+2

이중 대신에 작은 따옴표를 사용해보십시오. –

+2

ANSI_QUOTES 모드입니까? 그렇다면 문자열에 double이 지원되는 작은 따옴표를 사용해야합니다. https://dev.mysql.com/doc/refman/5.7/en/string-literals.html –

+0

작은 따옴표로 시도했지만 동일한 문제입니다. – Pickle

답변

1

이 시도 :

SELECT 
    CASE 
     WHEN `Please_identify_which_of_the_following_classroom_hardware_you_c2` LIKE '%Elmo%' THEN 'Elmo' 
     ELSE `Please_identify_which_of_the_following_classroom_hardware_you_c2` 
    END AS `Please_identify_which_of_the_following_classroom_hardware_you_c2`, 
    count(`_How_would_you_rate_your_overall_skill_in_using_educational_tec1`) as count, 
    `_How_would_you_rate_your_overall_skill_in_using_educational_tec1` 
FROM 
    `data_Copy_of_Faculty_survey_on_technology_in_the_classroom_Respo` 
GROUP BY 
    `_How_would_you_rate_your_overall_skill_in_using_educational_tec1`, 
    CASE 
     WHEN `Please_identify_which_of_the_following_classroom_hardware_you_c2` LIKE '%Elmo%' THEN 'Elmo' 
    ELSE `Please_identify_which_of_the_following_classroom_hardware_you_c2` 
     END 
+0

실행됩니다. 반환 된 결과 집합 꽤 일치하지 보인다. – Pickle

+0

죄송합니다. 나는 GROUP BY 절을 벗어났습니다. Case Statement는 Select and Group By ...에서 동일해야합니다. 더 좋습니까? - 형편없는 서식에 사과드립니다. 내가 여기 게시 한 것은 이번이 처음입니다. 나는 그것을 알아낼 것이다 :). – DataDad

+0

게시물을 편집 할 충분한 평판이 있습니다. 이 결과는 조금 더 나아 보인다. 감사. 그러나 Mark가 위의 설명에서 지적했듯이이 쿼리의 철학은 내가 원하는 것을 얻을 수 없으므로 케이스별로 그룹화하지 않아야하며 쿼리 후 코드의 데이터를 대조해야한다고 생각합니다. 실행됩니다. 그럼에도 불구하고 - 도와 줘서 고마워. – Pickle

2

당신이 문제를보고있는 이유는 GROUP BY 속성이 SELECT 속성으로 정렬되지 않은 것입니다. MySql docs put it으로

: 즉

"SQL92 and earlier does not permit queries for which 
the select list, HAVING condition, or ORDER BY list refer 
to nonaggregated columns that are neither named in the GROUP BY 
clause nor are functionally dependent on (uniquely determined by) 
GROUP BY columns" 

...c2 속성이 CASE ... END 속성 "에 기능적으로 의존"하지 이후는, SELECTGROUP BY 사이에 불일치, 따라서 오류가 발생했습니다.

오류를 완화하고 쿼리를 더 읽기 쉽게 만드는 한 가지 방법은 CASE을 한 번 수행 한 다음 결과 관계에 대해 집계를 수행하는 것입니다.

SELECT c2, tec1, COUNT(tec1) 
FROM 
    (SELECT 
     CASE 
     WHEN `Please_identify_which_of_the_following_classroom_hardware_you_c2` LIKE '%Elmo%' 
      THEN 'Elmo' 
     ELSE 
     `Please_identify_which_of_the_following_classroom_hardware_you_c2` 
     END AS c2, 
     `_How_would_you_rate_your_overall_skill_in_using_educational_tec1`) AS tec1 
    FROM 
     `data_Copy_of_Faculty_survey_on_technology_in_the_classroom_Respo`) t 
GROUP BY c2, tec1 
+0

이것이 정말로 답이라면 표시된 오류 메시지는 완전히 다른 것이어야합니다. 여기에 MSSQL 녀석으로 와서 야생의 거위 추격전을 보냈습니다. MSSQL은 group에 포함 된 내용이 select 문에 포함되어 있지 않다고 말한 것입니다. 구문 적으로 쿼리는 괜찮 았지만 의미 상으로 잘못되었습니다. –

관련 문제