Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je attribuer une valeur à une variable à l'aide de la fonction d'agrégation dans mysql ?

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 :