집 >데이터 베이스 >MySQL 튜토리얼 >SQL의 GROUP BY 및 ORDER BY 절에서 이름 지정 충돌을 방지하는 방법은 무엇입니까?
SQL GROUP BY
및 ORDER BY
절의 열 이름
질문:
SQL에서 데이터를 그룹화할 때 GROUP BY
및 ORDER BY
절에 올바른 열 이름을 지정해야 합니다. 입력 열과 출력 열 사이에 이름 지정 충돌이 있는 경우 결과가 올바르지 않을 수 있습니다.
해결책:
GROUP BY
절소스 열 이름 사용 방지: 그룹화에 소스 열 이름(예: attempt.result
)을 직접 사용하지 마세요. 원하는 결과를 결정하는 CASE
표현식을 사용하여 그룹화를 수행해야 합니다. 이렇게 하면 올바른 값으로 그룹화됩니다.
<code class="language-sql"> GROUP BY model.name, attempt.type, CASE WHEN attempt.result = 0 THEN 0 ELSE 1 END</code>
열 별칭 사용: 원래 열 이름을 사용하려면 SELECT
목록에 다른 별칭을 제공하세요. 이렇게 하면 출력 열이 그룹화를 방해하는 것을 방지할 수 있습니다.
<code class="language-sql"> SELECT ... , CASE WHEN attempt.result = 0 THEN 0 ELSE 1 END AS result1 GROUP BY model.name, attempt.type, result1</code>
ORDER BY
절위치 참조 사용: 출력 열 이름을 직접 인용하는 대신 ORDER BY
절에 위치 참조(서수)를 사용합니다. 이렇게 하면 잠재적인 이름 충돌을 방지할 수 있습니다.
<code class="language-sql"> ORDER BY 1, 2, 3</code>
예:
올바른 JOIN
구문, 위치 참조 및 이름 지정 충돌 해결을 사용하여 쿼리를 다시 작성하세요.
<code class="language-sql">SELECT m.name, a.type, CASE WHEN a.result = 0 THEN 0 ELSE 1 END AS result, CURRENT_DATE - 1 AS day, count(*) AS ct FROM attempt a JOIN prod_hw_id p USING (hard_id) JOIN model m USING (model_id) WHERE ts >= '2013-11-06 00:00:00' AND ts < '2013-11-07 00:00:00' GROUP BY 1, 2, 3 ORDER BY 1, 2, 3;</code>
위 내용은 SQL의 GROUP BY 및 ORDER BY 절에서 이름 지정 충돌을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!