GROUP BY A.*
SQL에서는 허용되지 않습니다.
그룹화 한 다음 하위 쿼리를 사용하여 하위 쿼리를 사용하여이를 무시할 수 있습니다.
SELECT A.*, COALESCE(B.cnt, 0) AS Count_B_Foo
FROM TABLE1 AS A
LEFT JOIN
( SELECT FKey, COUNT(foo) AS cnt
FROM TABLE2
GROUP BY FKey
) AS B
ON A.PKey = B.FKey ;
SQL-2003 표준 에는 기능적으로 종속되어 SELECT
있는 한 GROUP BY
목록에 없는 열을 목록 에 허용 하는 기능이 있습니다. 해당 기능이 SQL-Server에서 구현 된 경우 쿼리는 다음과 같이 작성되었을 수 있습니다.
SELECT A.*, COUNT(B.foo)
FROM TABLE1 A
LEFT JOIN TABLE2 B ON A.PKey = B.FKey
GROUP BY A.pk --- the Primary Key of table A
불행히도이 기능은 SQL-Server 2012 버전에서도 아직 구현되지 않았으며 내가 아는 한 다른 DBMS에서는 구현되지 않았습니다. MySQL이 있지만 부적절하게있는 MySQL을 제외하고 (부적절하게 : 위의 쿼리는 작동하지만 엔진은 기능 의존성을 검사하지 않으며 다른 잘못 작성된 쿼리는 잘못된 반 무작위 결과를 보여줍니다).
마찬가지로 @ 마크 바이어스는 코멘트에서 우리를 통보, PostgreSQL의 9.1 새로운 기능이 추가 된 이 목적을 위해 설계를. MySQL의 구현보다 더 제한적입니다.
GROUP BY
에서 절SELECT
목록, 그러나 그것은 값이 (그래서 열 또는 표현식의 경우에서 오는 것이라고하는 행으로 정의되지 않은 잎 ISN은 ' 그룹화 표현식에 기능적으로 의존하지 않으면 그룹 내의 모든 행에서 올 수 있습니다).