在一个mysql查询中获得男性/女性/所有人的平均投票率

在一个mysql查询中获得男性/女性/所有人的平均投票率,mysql,left-join,Mysql,Left Join,我有以下头疼的问题…我正在尝试一次性获得三个不同子句的平均评分,我认为使用UNION命令可能会奏效,但它只会从第一个查询(请求平均值的查询)中找到值。averageMaleRating和averageFemaleRating作为未知列返回 这就是问题所在 SELECT averageRating, averageMaleRating, averageFemaleRating FROM ( SELECT question_id AS q_id, ROUND(AVG(

我有以下头疼的问题…我正在尝试一次性获得三个不同子句的平均评分,我认为使用UNION命令可能会奏效,但它只会从第一个查询(请求平均值的查询)中找到值。averageMaleRating和averageFemaleRating作为未知列返回

这就是问题所在

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),这太棒了!谢谢你,海纳特!当我试着这样做的时候,我有点知道我使用工会是错误的:)干杯!