>데이터 베이스 >MySQL 튜토리얼 >SQL의 GROUP BY 및 ORDER BY 절에서 이름 지정 충돌을 방지하는 방법은 무엇입니까?

SQL의 GROUP BY 및 ORDER BY 절에서 이름 지정 충돌을 방지하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-10 14:46:42233검색

How to Avoid Naming Conflicts in SQL's GROUP BY and ORDER BY Clauses?

SQL GROUP BYORDER BY 절의 열 이름

질문:

SQL에서 데이터를 그룹화할 때 GROUP BYORDER 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.