U kunt geen kolom selecteren die u op hetzelfde niveau heeft gedefinieerd in uw SELECT
clausule. Als u een uitdrukking opnieuw wilt gebruiken, moet u een afgeleide tabel gebruiken:
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
Of je herhaalt natuurlijk gewoon de uitdrukking:
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
Als je alleen op die uitdrukking wilt bestellen, dan kan dat zonder trucjes (maar je kunt nog steeds niet SELECT
de uitdrukking op hetzelfde niveau van uw zoekopdracht)
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
De reden hiervoor wordt uitgelegd in dit blogartikel hier
Kanttekening
Afgezien van de bovenstaande uitleg, denk ik natuurlijk niet dat uw vraag correct is. Aangezien je alleen groepeert op b.user
, krijg je een willekeurige waarde voor a.user
en waarschijnlijk zijn uw sommen onjuist en krijgt u naar mijn mening een toevallig cartesiaans product. Maar dat is een onderwerp voor een andere vraag.