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 ที่มี แต่ไม่เพียงพอ (ไม่เพียงพอเป็น: แบบสอบถามด้านบนจะทำงานได้ แต่เครื่องยนต์จะไม่ตรวจสอบการพึ่งพาการทำงานและแบบสอบถามที่ไม่เป็นลายลักษณ์อักษรอื่น ๆ จะแสดงผลลัพธ์กึ่งสุ่มที่ไม่ถูกต้อง
ในฐานะที่เป็น@ Mark Byersแจ้งให้เราทราบในความคิดเห็นPostgreSQL 9.1 ได้เพิ่มคุณสมบัติใหม่ที่ออกแบบมาเพื่อวัตถุประสงค์นี้ มันมีข้อ จำกัด มากกว่าการใช้ MySQL
GROUP BY
ข้อในSELECT
รายการ แต่ใบมันไม่ได้กำหนดเป็นที่แถวนั้นค่าจะมาจาก (ดังนั้นหากคอลัมน์หรือแสดงออกISN ไม่สามารถใช้งานได้กับการแสดงออกของการจัดกลุ่มจากนั้นอาจมาจากแถวใดก็ได้ในกลุ่ม)