Menggunakan sesi yang ditentukan pengguna variabel di where
klausa hanya mungkin jika diinisialisasi sebelumnya . Kecuali sebaliknya, karena SQL- Permintaan-Urutan-Operasi
, variabel akan memiliki default NULL
dan kondisi mungkin tidak memuaskan hasil seperti yang diharapkan.
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 |
+-------+--------------------+---------------+------------------+
Di sini Anda dapat melihat dengan jelas bahwa variabel tidak diberi nilai apa pun per baris dan dari nilai yang dihitung dalam ekspresi kolom sebelumnya.
Anda dapat melihat efek sampingnya dengan menjalankan kueri berikut:
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 |
+-------+--------------------+---------------+------------------+
Contoh @ SQL Fiddle :