Nemůžete vybrat sloupec, který jste definovali na stejné úrovni v SELECT
doložka. Pokud chcete znovu použít výraz, musíte se uchýlit k použití odvozené tabulky:
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
Nebo samozřejmě jednoduše zopakujete výraz:
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
Pokud chcete pouze objednávat podle tohoto výrazu, pak je to možné bez jakýchkoli triků (ale stále nemůžete SELECT
výraz na stejné úrovni vašeho dotazu)
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
Důvod je vysvětlen v tomto článku na blogu zde
Vedlejší poznámka
Kromě výše uvedených vysvětlení si samozřejmě nemyslím, že váš dotaz je správný. Protože seskupujete pouze podle b.user
, získáte náhodnou hodnotu pro a.user
a pravděpodobně jsou vaše součty nesprávné, stejně jako podle mého názoru získáte náhodný kartézský součin. Ale to je téma na jinou otázku.