उपयोगकर्ता द्वारा परिभाषित सत्र . का उपयोग करना where
. में चर खंड केवल तभी संभव है जब यह पूर्व प्रारंभ हो . जब तक अन्यथा, SQL- के कारण क्वेरी-ऑर्डर-ऑफ़-ऑपरेशंस
, वेरिएबल में डिफ़ॉल्ट NULL
होगा और स्थिति अपेक्षित परिणामों को संतुष्ट नहीं कर सकती है।
set @var:=0;
SELECT
sClass class,
@var := cast(sum(maths+physics+chemistry)
/(count(sid)*3) as decimal(6,2)
) as avgMarksPerSubject,
@var as variableValue,
count(sid) as numberOfStudents
FROM StudentInformation
where @var < 65
group by sClass
;
+-------+--------------------+---------------+------------------+
| CLASS | AVGMARKSPERSUBJECT | VARIABLEVALUE | NUMBEROFSTUDENTS |
+-------+--------------------+---------------+------------------+
| 11th | 72.13 | 0 | 5 |
| 12th | 60.83 | 0 | 4 |
+-------+--------------------+---------------+------------------+
यहां आप स्पष्ट रूप से देख सकते हैं कि वेरिएबल को प्रति पंक्ति और पिछले कॉलम एक्सप्रेशन में परिकलित मान से कोई मान नहीं दिया गया है।
आप निम्न क्वेरी चलाकर इसके दुष्प्रभाव देख सकते हैं:
select * from (
SELECT
sClass class,
@var := cast(sum(maths+physics+chemistry)
/(count(sid)*3) as decimal(6,2)
) as avgMarksPerSubject,
@var as variableValue,
count(sid) as numberOfStudents
FROM StudentInformation
group by sClass
) r where avgMarksPerSubject > 65
+-------+--------------------+---------------+------------------+
| CLASS | AVGMARKSPERSUBJECT | VARIABLEVALUE | NUMBEROFSTUDENTS |
+-------+--------------------+---------------+------------------+
| 11th | 72.13 | 60.83 | 5 |
+-------+--------------------+---------------+------------------+
उदाहरण @ SQL Fiddle :