sql >> Databáze >  >> RDS >> Mysql

Jak mohu přiřadit hodnotu proměnné pomocí agregační funkce v mysql?

Pomocí uživatelem definované relace proměnná v where klauzule je možná pouze v případě, že je předinicializována . Pokud není jinak, vzhledem k SQL- Query-Order-of-Operations , proměnná bude mít výchozí hodnotu NULL a podmínka nemusí splňovat výsledky podle očekávání.

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

Zde jasně vidíte, že proměnné není přiřazena žádná hodnota na řádek az hodnoty vypočítané v předchozím sloupcovém výrazu.

Jeho vedlejší účinky můžete vidět spuštěním následujícího dotazu:

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

Příklad @ SQL Fiddle :




  1. INSERT INTO se nezdaří s node-mysql

  2. Jak zjistit, kdy byla v Oracle vytvořena konkrétní tabulka?

  3. Jak přidat skupinu souborů do databáze SQL Server (T-SQL)

  4. 2 způsoby, jak vrátit všechny uživatelem definované funkce v databázi SQL Server