Anda tidak dapat memilih kolom yang telah Anda tentukan pada level yang sama di SELECT
ayat. Jika Anda ingin menggunakan kembali ekspresi, Anda harus menggunakan tabel turunan:
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
Atau, tentu saja, Anda cukup mengulangi ungkapan:
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
Jika Anda hanya ingin memesan dengan ekspresi itu, maka itu mungkin tanpa trik apa pun (tetapi Anda masih tidak dapat SELECT
ekspresi pada tingkat yang sama dari kueri Anda)
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
Alasan untuk ini dijelaskan dalam artikel blog ini di sini
Catatan samping
Terlepas dari penjelasan di atas, tentu saja, menurut saya pertanyaan Anda tidak benar. Karena Anda hanya mengelompokkan berdasarkan b.user
, Anda akan mendapatkan nilai acak untuk a.user
dan mungkin jumlah Anda salah serta Anda mendapatkan produk kartesius yang tidak disengaja, menurut saya. Tapi itu topik untuk pertanyaan lain.