Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich einer Variablen mit der Aggregatfunktion in MySQL einen Wert zuweisen?

Verwenden einer benutzerdefinierten Sitzung Variable in where -Klausel ist nur möglich, wenn sie vorab initialisiert ist . Sofern nicht anders, aufgrund der SQL- Abfrage-Order-of-Operations , hat die Variable standardmäßig den Wert NULL und die Bedingung erfüllt möglicherweise nicht die erwarteten Ergebnisse.

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 |
+-------+--------------------+---------------+------------------+

Hier sieht man deutlich, dass der Variable kein Wert pro Zeile und aus dem im vorherigen Spaltenausdruck berechneten Wert zugewiesen wird.

Sie können seine Nebenwirkungen sehen, indem Sie die folgende Abfrage ausführen:

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 |
+-------+--------------------+---------------+------------------+

Beispiel @ SQL Fiddle :