Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak przypisać wartość do zmiennej za pomocą funkcji agregującej w mysql?

Korzystanie ze zdefiniowanej przez użytkownika sesji zmienna w where klauzula jest możliwa tylko wtedy, gdy jest wstępnie zainicjowana . O ile nie jest inaczej, ze względu na SQL- Zapytanie-Kolejność-Operacji , zmienna będzie miała domyślny NULL a warunek może nie spełniać oczekiwanych wyników.

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

Widać tutaj wyraźnie, że zmienna nie ma przypisanej żadnej wartości na wiersz ani z wartości obliczonej w poprzednim wyrażeniu kolumny.

Możesz zobaczyć jego skutki uboczne, uruchamiając następujące zapytanie:

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

Przykład @ SQL Fiddle :




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wstawić DateTime do bazy danych MySql za pomocą kodu C#?

  2. Jaka jest kolejność wierszy MySQL dla SELECT * FROM nazwa_tabeli;?

  3. Hibernate @SQLInsert i na zduplikowanym kluczu

  4. Jak wybrać z mysql, gdzie ostatni znak w ciągu =x?

  5. Jak uciec % z zapytania mysql w Pythonie?