2009-10-26 4 views
1

Это может быть трудно объяснить, так что голый со мной.MySQL с использованием вычисленных возвращаемых значений для вычисления других значений

Скажем, у меня есть выбор заявление следующего содержания:

SUM(st.tafPoints/200) as totalFriendReferrals, 
SUM(CASE WHEN st.gender = "m" THEN st.tafPoints/200 ELSE 0 END) as maleFriendReferrals, 
SUM(CASE WHEN st.gender = "f" THEN st.tafPoints/200 ELSE 0 END) as femaleFriendReferrals 

Мне нужно вычислить процент maleFriendReferrals на основе totalFriendReferrals. Они являются производными (т. Е. Не изначально в списке столбцов). Так что, если я пытаюсь сделать что-то вроде:

CONCAT((maleFriendReferrals/totalFriendReferrals) *100 , '%') as malePercentReferrals 

Но я получаю сообщение об ошибке:

Unknown column 'maleFriendReferrals' in 'field list' – 1 ms 

Есть ли способ сделать это легко? Мне нужно иметь возможность сделать это в самом запросе, и не нужно пробивать мои результаты для вычисления процентов.

ответ

3

Вы должны поместить исходный запрос в подзапрос

SELECT CONCAT((maleFriendReferrals/totalFriendReferrals) *100 , '%') as malePercentReferrals 
FROM 
    (SELECT 
    SUM(st.tafPoints/200) as totalFriendReferrals, 
    SUM(CASE WHEN st.gender = "m" THEN st.tafPoints/200 ELSE 0 END) as maleFriendReferrals, 
    SUM(CASE WHEN st.gender = "f" THEN st.tafPoints/200 ELSE 0 END) as femaleFriendReferrals 
    FROM st) AS subquery 
+0

Спасибо человек! Это полностью решило мою проблему. – Khuffie

Смежные вопросы