我有结构表
id
YearBorn
sex
livelen
我需要接收两性的平均livelength(livelen)的输出结果表 with struct
year, len1(female), len2(male)
我的查询
SELECT YearBorn ,
AVG(IF(sex='F', LiveLen, 0)) len1(female),
AVG(IF(sex='M', LiveLen, 0)) len2(male)
FROM persons p
GROUP BY YearBorn
但它无法正常工作 返回的平均值是将fem(男性)的总和 livlen 除以 livlen 的记录总数的结果,但不完全是 f的数量或m * 。 * 你能说些什么
答案 0 :(得分:3)
将0
替换为NULL
。否则,该值也会计算:
70 + 0 + 90
------------ = 50
3
70 + 90
------- = 80
2
答案 1 :(得分:1)
使用您自己的AVG
SELECT
YearBorn ,
SUM(IF(sex='F', LiveLen, 0))/COUNT(IF(sex='F', LiveLen, 0)) len1(female),
SUM(IF(sex='F', LiveLen, 0))/COUNT(IF(sex='F', LiveLen, 0)) len2(male)
FROM persons p
GROUP BY YearBorn
或者使用在聚合中忽略的NULL。 0是值
SELECT
YearBorn ,
AVG(CASE WHEN sex = 'F' THEN LiveLen ELSE NULL END) len1(female),
AVG(CASE WHEN sex = 'M' THEN LiveLen ELSE NULL END) len2(male)
FROM persons p
GROUP BY YearBorn
CASE更便携,然后内联IF