gpt4 book ai didi

如果在另一列中,则基于总和的Mysql平均值

转载 作者:太空宇宙 更新时间:2023-11-03 12:15:39 24 4
gpt4 key购买 nike

举个例子,假设我试图计算出每个 parent 对男性和女性的平均分数。

示例数据如下所示:

parentID    childID    sex    score
------------------------------------
1 21 m 17
1 23 f 12
2 33 f 55
2 55 m 22
3 67 m 26
3 78 f 29
3 93 m 31

这是我想要的结果:

parentID    offspring   m    f   avg-m  avg-f  avg-both
----------------------------------------------------
1 2 1 1 17 12 14.5
2 2 1 1 22 55 38.5
3 3 2 1 28.5 29 28.67

通过下面的查询,我可以找到男性和女性的平均值,但我不确定如何获得男性或女性的平均值

SELECT parentID, COUNT( childID ) AS offspring, SUM( IF( sex =  'm', 1, 0 ) ) AS m, SUM( IF( sex =  'f', 1, 0 ) ) AS f, max(score) as avg-both
FROM sexb_1
WHERE avg-both > 11
GROUP BY parentID

我在查询中尝试了类似的操作,但它返回了一个错误

AVG(IF(sex = 'm', max(score),0)) as avg-m

最佳答案

I tried something like this in the query but it returns an error

AVG(IF(sex = 'm', max(score),0)) as avg-m

您不能在另一个聚合函数中使用一个聚合函数(在这种情况下,AVG() 中的 MAX())——这意味着什么?一旦发现组的 MAX(),对什么取平均?

相反,您希望在性别符合您要求的情况下采用 AVG()score 值;由于 AVG() 忽略 NULL 值并且不匹配的 CASE 表达式的默认值为 NULL,因此可以简单地执行以下操作:

SELECT   parentID, 
COUNT(*) offspring,
SUM(sex='m') m,
SUM(sex='f') f,
AVG(CASE sex WHEN 'm' THEN score END) `avg-m`,
AVG(CASE sex WHEN 'f' THEN score END) `avg-f`,
AVG(score) `avg-both`
FROM sexb_1
GROUP BY parentID
HAVING `avg-both` > 11

查看sqlfiddle .

关于如果在另一列中,则基于总和的Mysql平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22348351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com