[SQL] SQL - 그룹에 의해 별칭을 사용
SQLSQL - 그룹에 의해 별칭을 사용
SQL 구문에 대한 그냥 궁금해서. 나는 그래서 만약
SELECT
itemName as ItemName,
substring(itemName, 1,1) as FirstLetter,
Count(itemName)
FROM table1
GROUP BY itemName, FirstLetter
이것은 잘못된 때문에 것
GROUP BY itemName, FirstLetter
정말해야
GROUP BY itemName, substring(itemName, 1,1)
그런데 왜 우리는 단순히 편의를 위해 전자를 사용할 수없는 이유는 무엇입니까?
해결법
-
==============================
1.쿼리는 다음과 같은 순서로 실행 된 것처럼 SQL이 구현된다 :
쿼리는 다음과 같은 순서로 실행 된 것처럼 SQL이 구현된다 :
대부분의 관계형 데이터베이스 시스템의 경우,이 순서는이 이전 단계에서 도입 된해야하기 때문에 이름 (열 또는 별칭) 유효한있는 설명합니다.
그래서 오라클과 SQL 서버에서는 GROUP BY는 SELECT 절 전에 실행되기 때문에 사용자가 SELECT 절에 정의하는 것이 GROUP BY 절에 용어를 사용할 수 없습니다.
MySQL과 포스트 그레스가 허용 추가 멋있는 것을 보인다 :하지만 예외가 있습니다.
-
==============================
2.별칭을 사용할 수 있도록 항상 하위 쿼리를 사용할 수 있습니다; 물론, (DB 서버가 모두 동일하게 실행 가능하지만, 확인 결코 아프지 않는다) 성능을 확인 :
별칭을 사용할 수 있도록 항상 하위 쿼리를 사용할 수 있습니다; 물론, (DB 서버가 모두 동일하게 실행 가능하지만, 확인 결코 아프지 않는다) 성능을 확인 :
SELECT ItemName, FirstLetter, COUNT(ItemName) FROM ( SELECT ItemName, SUBSTRING(ItemName, 1, 1) AS FirstLetter FROM table1 ) ItemNames GROUP BY ItemName, FirstLetter
-
==============================
3.PostgreSQL의에서 적어도 당신은 절하여 GROUP의 결과 집합의 열 번호를 사용할 수 있습니다 :
PostgreSQL의에서 적어도 당신은 절하여 GROUP의 결과 집합의 열 번호를 사용할 수 있습니다 :
SELECT itemName as ItemName, substring(itemName, 1,1) as FirstLetter, Count(itemName) FROM table1 GROUP BY 1, 2
물론 이것은 고통을 시작 당신은 대화 형으로이 일을하고 당신은 결과의 열 수 또는 순서를 변경할 수있는 쿼리를 편집합니다. 하지만 여전히.
-
==============================
4.SQL Server는이 때문에 처리의 논리적 인 순서의 GROUP BY 절에서 별칭을 참조 할 수 없습니다. GROUP BY 절을 평가할 때 별명이 알려져되지 않도록 GROUP BY 절은 SELECT 절 전에 처리됩니다. 당신이 ORDER BY 절에서 별칭을 사용할 수있는 이유도 설명합니다.
SQL Server는이 때문에 처리의 논리적 인 순서의 GROUP BY 절에서 별칭을 참조 할 수 없습니다. GROUP BY 절을 평가할 때 별명이 알려져되지 않도록 GROUP BY 절은 SELECT 절 전에 처리됩니다. 당신이 ORDER BY 절에서 별칭을 사용할 수있는 이유도 설명합니다.
여기에 SQL 서버의 논리적 처리 단계에 대한 정보를 하나의 소스입니다.
-
==============================
5.나는 왜 그런지 대답 만 별칭을 만들 적용 CROSS를 사용하여 SQL 서버에서이 제한을 해결하는 방법을 보여주고 싶었 아니에요. 당신은 다음과 같이, GROUP BY 절에서 사용 :
나는 왜 그런지 대답 만 별칭을 만들 적용 CROSS를 사용하여 SQL 서버에서이 제한을 해결하는 방법을 보여주고 싶었 아니에요. 당신은 다음과 같이, GROUP BY 절에서 사용 :
SELECT itemName as ItemName, FirstLetter, Count(itemName) FROM table1 CROSS APPLY (SELECT substring(itemName, 1,1) as FirstLetter) Alias GROUP BY itemName, FirstLetter
-
==============================
6.(예 : 포스트 그레스로,이를 지원 서비스) 그룹에 의해 사용 별칭이 의도하지 않은 결과를 가질 수 있음을주의. 이미 내부 문에 존재하는 별칭을 만들 경우, 예를 들어, 그룹으로는 내부 필드 이름을 선택합니다.
(예 : 포스트 그레스로,이를 지원 서비스) 그룹에 의해 사용 별칭이 의도하지 않은 결과를 가질 수 있음을주의. 이미 내부 문에 존재하는 별칭을 만들 경우, 예를 들어, 그룹으로는 내부 필드 이름을 선택합니다.
-- Working example in postgres select col1 as col1_1, avg(col3) as col2_1 from (select gender as col1, maritalstatus as col2, yearlyincome as col3 from customer) as layer_1 group by col1_1; -- Failing example in postgres select col2 as col1, avg(col3) from (select gender as col1, maritalstatus as col2, yearlyincome as col3 from customer) as layer_1 group by col1;
-
==============================
7.일부의 DBMS는 대신 전체 표현식을 반복 할 필요없이 별칭을 사용하게됩니다. 테라는 하나의 이러한 예이다.
일부의 DBMS는 대신 전체 표현식을 반복 할 필요없이 별칭을 사용하게됩니다. 테라는 하나의 이러한 예이다.
이 SO 질문에 설명 된 이유로 빌에서 권장하는대로 나는 서수 위치 표기법을 피하십시오.
쉽고 강력한 대안은 항상 GROUP BY 절에 표현식을 반복하는 것입니다. DRY는 SQL에 적용되지 않습니다.
-
==============================
8.SQLite는의보기에서 결과를 그룹화 할 때 별칭을 사용하여 조심하십시오. 별칭 이름에 기본 테이블의 컬럼 이름과 동일한 경우 예기치 않은 결과를 얻을 것이다 (보기에).
SQLite는의보기에서 결과를 그룹화 할 때 별칭을 사용하여 조심하십시오. 별칭 이름에 기본 테이블의 컬럼 이름과 동일한 경우 예기치 않은 결과를 얻을 것이다 (보기에).
-
==============================
9.위로 하루에 나는 RDB는, 이제 오라클에서 지원하는 전 감속 제품이 열 별칭이 GROUP BY에 사용 할 수 있음을 발견했다. 버전 11을 통해 주류 오라클은 열 별칭이 GROUP BY에 사용되는 것을 허용하지 않습니다. 확실하지 PostgreSQL을, SQL 서버, MySQL은, 등이 또는 허용하지 않습니다 무슨. YMMV.
위로 하루에 나는 RDB는, 이제 오라클에서 지원하는 전 감속 제품이 열 별칭이 GROUP BY에 사용 할 수 있음을 발견했다. 버전 11을 통해 주류 오라클은 열 별칭이 GROUP BY에 사용되는 것을 허용하지 않습니다. 확실하지 PostgreSQL을, SQL 서버, MySQL은, 등이 또는 허용하지 않습니다 무슨. YMMV.
from https://stackoverflow.com/questions/3841295/sql-using-alias-in-group-by by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 두 숫자 사이의 숫자의 범위를 생성하는? (0) | 2020.03.13 |
---|---|
[SQL] SQL 서버 - 저장 프로 시저에서 SELECT (0) | 2020.03.13 |
[SQL] 어떻게 엔티티 프레임 워크를 사용하여 하나 개의 필드를 업데이트하는? (0) | 2020.03.13 |
[SQL] 클라이언트 - 서버 데이터베이스를 동기화 (0) | 2020.03.13 |
[SQL] SQL 문은 어디에서 매개 변수를 무시 (0) | 2020.03.13 |