Du kan inte välja en kolumn som du har definierat på samma nivå i din SELECT
klausul. Om du vill återanvända ett uttryck måste du använda en härledd tabell:
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 så upprepar du helt enkelt uttrycket:
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
Om du bara vill beställa efter det uttrycket så är det möjligt utan några knep (men du kan fortfarande inte SELECT
uttrycket på samma nivå som din fråga)
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
Anledningen till detta förklaras i den här bloggartikeln här
Sidoanteckning
Bortsett från ovanstående förklaringar tror jag naturligtvis inte att din fråga är korrekt. Eftersom du bara grupperar efter b.user
, får du ett slumpmässigt värde för a.user
och förmodligen är dina summor felaktiga samt att du får en oavsiktlig kartesisk produkt, enligt mig. Men det är ett ämne för en annan fråga.