sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag tilldela värde till en variabel med aggregatfunktion i mysql?

Använder en användardefinierad session variabel i where klausul är endast möjlig när den är förinitierad . Om inte annat, på grund av SQL- Query-Order-of-Operations , kommer variabeln att ha en standard NULL och tillståndet kanske inte uppfyller de förväntade 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 |
+-------+--------------------+---------------+------------------+

Här kan du tydligt se att variabeln inte tilldelas något värde per rad och från det värde som beräknats i föregående kolumnuttryck.

Du kan se dess biverkningar genom att köra följande fråga:

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

Exempel @ SQL Fiddle :




  1. Skapa en e-postprofil för databas i SQL Server (T-SQL)

  2. Anropar en Oracle-procedur med en PL/SQL-insamlingstypparameter via .NET

  3. slå samman två tabeller tillsammans med antalet poster från den andra tabellen baserat på tillstånd

  4. CloudFormation:Mall RDS Mysql för att skapa DB, tabeller, användare eller ladda schema