sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo puedo asignar valor a una variable usando la función agregada en mysql?

Uso de una sesión definida por el usuario variable en where la cláusula solo es posible cuando está preiniciada . A menos que se indique lo contrario, debido a SQL- Consulta-Orden-de-Operaciones , la variable tendrá un NULL predeterminado y la condición puede no satisfacer los 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 |
+-------+--------------------+---------------+------------------+

Aquí puede ver claramente que a la variable no se le asigna ningún valor por fila y a partir del valor calculado en la expresión de la columna anterior.

Puede ver sus efectos secundarios ejecutando la siguiente 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 |
+-------+--------------------+---------------+------------------+

Ejemplo @ SQL Fiddle :