Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso assegnare un valore a una variabile usando la funzione di aggregazione in mysql?

Utilizzando una sessione definita dall'utente variabile in where la clausola è possibile solo quando è preinizializzato . Se non diversamente, a causa di SQL- Query-Ordine delle operazioni , la variabile avrà un valore predefinito NULL e la condizione potrebbe non soddisfare i risultati come previsto.

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

Qui puoi vedere chiaramente che alla variabile non viene assegnato alcun valore per riga e dal valore calcolato nell'espressione della colonna precedente.

Puoi vedere i suoi effetti collaterali eseguendo la seguente query:

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

Esempio @ SQL Fiddle :