Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana saya bisa menetapkan nilai ke variabel menggunakan fungsi agregat di mysql?

Menggunakan sesi yang ditentukan pengguna variabel di where klausa hanya mungkin jika diinisialisasi sebelumnya . Kecuali sebaliknya, karena SQL- Permintaan-Urutan-Operasi , variabel akan memiliki default NULL dan kondisi mungkin tidak memuaskan hasil seperti yang diharapkan.

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

Di sini Anda dapat melihat dengan jelas bahwa variabel tidak diberi nilai apa pun per baris dan dari nilai yang dihitung dalam ekspresi kolom sebelumnya.

Anda dapat melihat efek sampingnya dengan menjalankan kueri berikut:

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

Contoh @ 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. Unserialize melalui kueri di tingkat basis data itu sendiri

  2. Apakah MySql secara otomatis mengunci baris atau apakah saya perlu menambahkan kunci dalam mode berbagi?

  3. Bagaimana konstruktor kelas anak berinteraksi dengan konstruktor kelas induk di php?

  4. MySQL INSERT dan SELECT Urutan prioritas

  5. Ambil tanggal yang hilang dari database melalui MySQL