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

Hvordan kan jeg tildele værdi til en variabel ved hjælp af aggregatfunktion i mysql?

Brug af en brugerdefineret session variabel i where klausul er kun mulig, når den er forinitialiseret . Medmindre andet, på grund af SQL- Forespørgsel-Order-of-Operations , vil variablen have en standard NULL og tilstanden opfylder muligvis ikke resultaterne som forventet.

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

Her kan du tydeligt se, at variablen ikke er tildelt nogen værdi pr. række og ud fra værdien beregnet i det forrige kolonneudtryk.

Du kan se bivirkningerne ved at køre følgende forespørgsel:

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

Eksempel @ SQL Fiddle :




  1. WEEKOFYEAR(NU()) vs WEEK('2018-05-1') - den aktuelle dato

  2. MYSQL undersæt operation

  3. Sådan får du dagen fra en date i T-SQL

  4. to_sql pyodbc count felt forkert eller syntaksfejl