Utilisation d'une session définie par l'utilisateur variable dans where
la clause n'est possible que lorsqu'elle est préinitialisée . Sauf indication contraire, en raison du SQL- Requête-ordre-des-opérations
, la variable aura un NULL
par défaut et la condition peut ne pas satisfaire les résultats attendus.
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 |
+-------+--------------------+---------------+------------------+
Ici, vous pouvez clairement voir qu'aucune valeur n'est attribuée à la variable par ligne et à partir de la valeur calculée dans l'expression de colonne précédente.
Vous pouvez voir ses effets secondaires en exécutant la requête suivante :
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 |
+-------+--------------------+---------------+------------------+
Exemple @ SQL Fiddle :