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 ;
SELECT
सूची में अनुमति देने के लिए SQL-2003 मानक में एक विशेषता है , कॉलम जो 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
दुर्भाग्य से, यह सुविधा अभी तक लागू नहीं हुई है, यहां तक कि एसक्यूएल-सर्वर 2012 संस्करण में भी नहीं - और किसी अन्य डीबीएमएस में नहीं, जहां तक मुझे पता है। MySQL के अलावा जो इसमें है लेकिन अपर्याप्त रूप से (अपर्याप्त रूप से: उपरोक्त क्वेरी काम करेगी लेकिन इंजन कार्यात्मक निर्भरता के लिए कोई जाँच नहीं करेगा और अन्य बीमार लिखित प्रश्न गलत, अर्ध-यादृच्छिक परिणाम दिखाएंगे)।
जैसा कि @Mark Byers ने हमें एक टिप्पणी में सूचित किया, PostgreSQL 9.1 ने इस उद्देश्य के लिए डिज़ाइन किया गया एक नया फीचर जोड़ा । यह MySQL के कार्यान्वयन से अधिक प्रतिबंधात्मक है।
GROUP BY
खंड में शामिल नहीं होने वाली वस्तुओं को शामिल करने के लिए (उचित सेटिंग्स दिए जाने की अनुमति देगा)SELECT
, लेकिन यह इसे अपरिभाषित छोड़ देता है कि यह मान किस पंक्ति से आएगा (इसलिए यदि स्तंभ या अभिव्यक्ति isn है 'टी कार्यात्मक समूहीकरण अभिव्यक्ति पर निर्भर है, तो यह हो सकता है समूह के भीतर किसी भी पंक्ति से आते हैं)।