Du kan ikke vælge en kolonne, som du har defineret på samme niveau i din SELECT
klausul. Hvis du vil genbruge et udtryk, skal du ty til at bruge en afledt tabel:
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
Eller du gentager selvfølgelig blot udtrykket:
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
Hvis du bare vil bestille efter det udtryk, så er det muligt uden nogen tricks (men du kan stadig ikke SELECT
udtrykket på samme niveau som din forespørgsel)
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
Årsagen til dette er forklaret i denne blogartikel her
Sidebemærkning
Bortset fra ovenstående forklaringer, tror jeg selvfølgelig ikke, at din forespørgsel er korrekt. Da du kun grupperer efter b.user
, får du en tilfældig værdi for a.user
og sandsynligvis er dine summer forkerte, ligesom du får et utilsigtet kartesisk produkt, efter min mening. Men det er et emne for et andet spørgsmål.