Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso atribuir valor a uma variável usando a função agregada no mysql?


Usando uma sessão definida pelo usuário variável em where cláusula só é possível quando é pré inicializada . A menos que de outra forma, devido ao SQL- Consulta-Ordem de Operações , a variável terá um padrão NULL e a condição pode não satisfazer os resultados esperados.
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 |
+-------+--------------------+---------------+------------------+

Aqui você pode ver claramente que a variável não recebe nenhum valor por linha e a partir do valor calculado na expressão de coluna anterior.

Você pode ver seus efeitos colaterais executando a seguinte consulta:
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 |
+-------+--------------------+---------------+------------------+

Exemplo @ SQL Fiddle :