在一个mysql查询中获得男性/女性/所有人的平均投票率
我有以下头疼的问题…我正在尝试一次性获得三个不同子句的平均评分,我认为使用UNION命令可能会奏效,但它只会从第一个查询(请求平均值的查询)中找到值。averageMaleRating和averageFemaleRating作为未知列返回 这就是问题所在在一个mysql查询中获得男性/女性/所有人的平均投票率,mysql,left-join,Mysql,Left Join,我有以下头疼的问题…我正在尝试一次性获得三个不同子句的平均评分,我认为使用UNION命令可能会奏效,但它只会从第一个查询(请求平均值的查询)中找到值。averageMaleRating和averageFemaleRating作为未知列返回 这就是问题所在 SELECT averageRating, averageMaleRating, averageFemaleRating FROM ( SELECT question_id AS q_id, ROUND(AVG(
SELECT
averageRating,
averageMaleRating,
averageFemaleRating
FROM (
SELECT
question_id AS q_id,
ROUND(AVG(rating)) AS averageRating
FROM
wp_ratings
WHERE
club_id = ?
GROUP BY question_id
UNION
SELECT
question_id AS q_id,
ROUND(AVG(rating)) AS averageMaleRating
FROM
wp_ratings
WHERE
club_id = ?
AND
GENDER = 'male'
GROUP BY question_id
UNION
SELECT
question_id AS q_id,
ROUND(AVG(rating)) AS averageFemaleRating
FROM
wp_ratings
WHERE
club_id = ?
AND
GENDER = 'female'
GROUP BY question_id
)AS bigU
JOIN
wp_ratings
ON
wp_ratings.question_id = bigU.q_id
你用的工会声明完全错误 您需要从问题表中选择并加入每个性别的评分表
SELECT
q.id,
AVG(t.rating) AS avgTotal,
AVG(m.rating) AS avgMale,
AVG(f.rating) AS avgFemale
FROM questions AS q
LEFT JOIN ratings AS t
ON q.id = t.question_id
LEFT JOIN ratings AS m
ON q.id = m.question_id AND m.gender = 'male'
LEFT JOIN ratings AS f
ON q.id = f.question_id AND f.gender = 'female'
GROUP BY q.id
您的表模式将比您的40行查询更有用。哈,是的,很抱歉,但无论如何。。。!表模式有几个不同的字段,但我需要的唯一字段是:club_id(int)、gender(enum、male、femal)、question_id(int)和rating(int),这太棒了!谢谢你,海纳特!当我试着这样做的时候,我有点知道我使用工会是错误的:)干杯!