GROUP BY A.*
SQL'de izin verilmiyor.
Bunu, grupladığınız bir alt sorguyu kullanarak atlayabilir ve ardından katılabilirsiniz:
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 standardında, SELECT
listede GROUP BY
işlevsel olan bağımlı oldukları sürece listede bulunmayan sütunlara izin veren bir özellik vardır . Bu özellik SQL Server'da uygulanmış olsaydı, sorgunuz şu şekilde yazılmış olabilirdi:
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
Ne yazık ki, bu özellik henüz SQL Server 2012 sürümünde bile uygulanmadı - ve bildiğim kadarıyla herhangi bir başka DBMS'de uygulanmadı. Sahip olan ancak yetersiz olan MySQL dışında (yetersiz olduğu şekilde: yukarıdaki sorgu çalışacaktır ancak motor işlevsel bağımlılık için herhangi bir kontrol yapmaz ve diğer yazılı olmayan sorgular yanlış, yarı rasgele sonuçlar gösterecektir).
@ Mark Byers'in bir yorumda bizi bilgilendirdiği gibi , PostgreSQL 9.1 bu amaç için tasarlanmış yeni bir özellik ekledi . MySQL'in uygulanmasından daha kısıtlayıcıdır.
GROUP BY
bendindeSELECT
listesinde, ama buna değer (böylece kolon veya ifade varsa gelecek ki hangi satırı olarak tanımlanmamış bırakır değil mi 't gruplama sentezleme üzerine işlevsel olarak bağlıdır, o zaman olabilir ) grup içindeki herhangi bir üst üste gelir.