Bạn không thể chọn một cột mà bạn đã xác định ở cùng một cấp trong SELECT
của mình mệnh đề. Nếu bạn muốn sử dụng lại một biểu thức, bạn phải sử dụng bảng dẫn xuất:
SELECT x.*, (common_p_count+common_r_count)
FROM (
SELECT
a.user AS a_user,
b.user AS b_user,
SUM(a.post = b.post) AS common_p_count,
SUM(a.option = b.option) AS common_r_count
FROM response a, response b
WHERE a.user = '1' AND b.user != '1' group by b.user
) x
Hoặc, tất nhiên, bạn chỉ cần lặp lại biểu thức:
SELECT
a.user AS a_user,
b.user AS b_user,
SUM(a.post = b.post) AS common_p_count,
SUM(a.option = b.option) AS common_r_count,
(SUM(a.post = b.post) + SUM(a.option = b.option))
FROM response a, response b
WHERE a.user = '1' AND b.user != '1' group by b.user
Nếu bạn chỉ muốn đặt hàng theo biểu thức đó thì có thể thực hiện được mà không cần bất kỳ thủ thuật nào (nhưng bạn vẫn không thể SELECT
biểu thức ở cùng cấp độ truy vấn của bạn)
SELECT
a.user AS a_user,
b.user AS b_user,
SUM(a.post = b.post) AS common_p_count,
SUM(a.option = b.option) AS common_r_count
FROM response a, response b
WHERE a.user = '1' AND b.user != '1' group by b.user
ORDER BY common_p_count + common_r_count
Lý do cho điều này được giải thích trong bài viết blog này ở đây
Ghi chú bên lề
Tất nhiên, ngoài những giải thích ở trên, tôi không nghĩ rằng truy vấn của bạn là đúng. Vì bạn chỉ nhóm theo b.user
, bạn sẽ nhận được một giá trị ngẫu nhiên cho a.user
và có thể số tiền của bạn không chính xác cũng như bạn nhận được một sản phẩm xe đẩy tình cờ, theo ý kiến của tôi. Nhưng đó là một chủ đề cho một câu hỏi khác.