Tôi tình cờ gặp một tình huống tương tự. Này đến hữu ích: http://tech-blog.borychowski.com/index.php/2009/02/mysql/average-value-in-a-row/
Từ trang này:
Khi chúng ta làm:
SELECT *, (V.rank_0 + V.rank_1 + V.rank_2)/3
AS row_avg FROM voting V
chúng tôi chỉ nhận được trung bình chính xác cho các hàng nơi mà tất cả các giá trị không phải là NULL. Nhưng khi tôi có ví dụ 3, NULL, 4 Tôi muốn nhận được 3,5 như một sự trở lại. Đó là thời điểm hàm COALESCE() có ích.
COALESCE() làm gì? Từ hướng dẫn sử dụng MySQL, chúng tôi có:
Trả về giá trị không NULL đầu tiên trong danh sách hoặc NULL nếu không có giá trị không NULL.
mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
-> NULL
Và những thông tin này sẽ giúp chúng ta xây dựng một câu lệnh SELECT:
SELECT *,
#first part
(COALESCE(V.rank_0, 0)
+ COALESCE(V.rank_1, 0)
+ COALESCE(V.rank_2, 0))
/
#second part
(3 -
(COALESCE(V.rank_0 - V.rank_0, 1)
+ COALESCE(V.rank_1 - V.rank_1, 1)
+ COALESCE(V.rank_2 - V.rank_2, 1))
) AS row_avg FROM voting V
Giàu B: Tôi có cách cá nhân của tôi như thế nào tôi muốn đặt câu hỏi, bạn không cần phải thay đổi tiêu đề của tôi một cách hệ thống ! – markus
Nếu bạn có các cột trong sự sắp xếp bạn mô tả, đó là một lá cờ đỏ mà bảng này không được chuẩn hóa đúng cách. Chúng phải là các hàng trong bảng con. –
@Bill: có thể là mùi nhưng tôi không nghĩ đó là trường hợp ở đây. Tôi có kết quả mục câu hỏi duy nhất trong một hàng dữ liệu tương ứng với một người dùng và một phép đo. – markus