क्योंकि केवल PK GROUP BY
. में अंतर्निहित तालिका के सभी स्तंभों को कवर करता है खंड। इसलिए आपकी पहली क्वेरी काम करती है। एक UNIQUE
बाधा नहीं है।
एक गैर-स्थगित UNIQUE
. का संयोजन और एक NOT NULL
बाधा भी योग्य होगी। लेकिन यह लागू नहीं किया गया है - साथ ही साथ कुछ अन्य कार्यात्मक निर्भरताएं जिन्हें SQL मानक के लिए जाना जाता है। फीचर के प्रमुख लेखक पीटर एसेंट्राउट के दिमाग में और भी चीजें थीं, लेकिन उस समय यह निर्धारित किया गया था कि मांग कम है और संबंधित लागत अधिक हो सकती है। pgsql-hackers पर सुविधा के बारे में चर्चा देखें।
मैनुअल:
<ब्लॉकक्वॉट>
जब GROUP BY
मौजूद है, या कोई समग्र कार्य मौजूद है, यह SELECT
. के लिए मान्य नहीं है कुल कार्यों को छोड़कर या जब असमूहीकृत स्तंभ कार्यात्मक रूप से समूहीकृत स्तंभों पर निर्भर होता है, तो असमूहीकृत स्तंभों को संदर्भित करने के लिए सूची अभिव्यक्तियाँ, क्योंकि अन्यथा एक असमूहित स्तंभ के लिए लौटने के लिए एक से अधिक संभावित मान होंगे। एक कार्यात्मक निर्भरता मौजूद होती है यदि समूहबद्ध स्तंभ (या उसके उपसमूह) समूहबद्ध स्तंभ वाली तालिका की प्राथमिक कुंजी हैं।
और अधिक स्पष्ट रूप से:
<ब्लॉकक्वॉट>
PostgreSQL कार्यात्मक निर्भरता को पहचानता है (स्तंभों को GROUP BY
. से छोड़े जाने की अनुमति देता है ) केवल तभी जब तालिका की प्राथमिक कुंजी GROUP BY
. में शामिल हो सूची। SQL मानक अतिरिक्त शर्तों को निर्दिष्ट करता है जिन्हें पहचाना जाना चाहिए।
चूंकि c.vin
है UNIQUE NOT NULL
, आप इसके बजाय PK कॉलम का उपयोग करके अपनी दूसरी क्वेरी को ठीक कर सकते हैं:
...
group by c.id;
इसके अलावा, जबकि संदर्भात्मक अखंडता को लागू किया जाता है और पूरी तालिका की पूछताछ की जाती है, दिए गए दोनों प्रश्न काफी सस्ते हो सकते हैं:appraisal
में कुल पंक्तियां पहले शामिल हों। यह GROUP BY
. की आवश्यकता को हटा देता है बाहरी में SELECT
संभवतः। पसंद:
SELECT c.vin, c.color, c.brand
, a.min_appraisal
, a.max_appraisal
FROM car c
LEFT JOIN (
SELECT car_vin
, min(price) AS min_appraisal
, max(price) AS max_appraisal
FROM appraisal
GROUP BY car_vin
) a ON a.car_vin = c.vin;
देखें:
- एक ही क्वेरी में कई array_agg() कॉल
संबंधित:
- SQL स्टेटमेंट MySQL में काम कर रहा है जो Postgresql में काम नहीं कर रहा है - Sum &group_by Rails 3
- PostgreSQL - ग्रुप बाय क्लॉज