MySQL使用计算的返回值来计算其他值

问题描述:

这可能很难解释,所以与我一起裸露。MySQL使用计算的返回值来计算其他值

比方说,我有以下的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 

我需要计算基础上,totalFriendReferrals maleFriendReferrals的百分比。这些都是派生的(即,不是最初在列的列表中)值。所以,如果我试着这样做:

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

但我得到一个错误:

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

有没有一种方法可以轻松地做到这一点?我需要能够在查询本身中完成此操作,而不必循环查看结果来计算百分比。

你应该把原来的查询子查询

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 2009-10-26 19:51:39