Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để gán giá trị cho một biến bằng cách sử dụng hàm tổng hợp trong mysql?

Sử dụng phiên do người dùng xác định biến trong where mệnh đề chỉ có thể thực hiện được khi nó được khởi tạo trước . Trừ khi khác, do SQL- Truy vấn-Thứ tự-Hoạt động , biến sẽ có NULL mặc định và điều kiện có thể không đáp ứng kết quả như mong đợi.

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

Ở đây, bạn có thể thấy rõ rằng biến không được gán bất kỳ giá trị nào cho mỗi hàng và từ giá trị được tính trong biểu thức cột trước đó.

Bạn có thể thấy tác dụng phụ của nó bằng cách chạy truy vấn sau:

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

Ví dụ @ 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. MySQL THAM GIA Nhiều Tham gia trên cùng một bảng?

  2. Xử lý tập hợp kết quả lớn từ mysql với bộ nhớ hạn chế

  3. Lọc giữa hai ngày MYSQL

  4. tạo tiêu đề trang duy nhất slugs php

  5. lưu trữ số âm trong trường thập phân của bảng mysql kể từ phiên bản 5.0.3