sql >> Database >  >> RDS >> Mysql

Hoe kan ik waarde toewijzen aan een variabele met behulp van de aggregatiefunctie in mysql?

Een door de gebruiker gedefinieerde sessie gebruiken variabele in where clausule is alleen mogelijk als deze vooraf is geïnitialiseerd . Tenzij anders, vanwege de SQL- Query-volgorde-van-bewerkingen , heeft de variabele een standaard NULL en de voorwaarde voldoet mogelijk niet aan de verwachte resultaten.

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 kunt u duidelijk zien dat de variabele geen enkele waarde per rij en van de in de vorige kolomuitdrukking berekende waarde krijgt.

U kunt de bijwerkingen zien door de volgende zoekopdracht uit te voeren:

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

Voorbeeld @ SQL Fiddle :




  1. Hoe de omzet per semester te berekenen?

  2. MySQL-groepsresultaten per dag met tijdstempel

  3. Kan ik een bijgewerkte structuur in een MySQL-tabel importeren zonder de huidige inhoud te verliezen?

  4. PostgreSQL CSV importeren vanaf de opdrachtregel