先排序再分组 mysql

order by first then group by in mysql

我有3个表如下

问题(q_id,问题,cat_id)

答案(a_id,q_id,答案,user_id,评分)

用户(user_id,用户名)

现在我想要特定类别的所有问题及其一个答案(如果退出率最高)和回答者的用户名。

我正在使用以下查询来执行此操作,但它没有给我最高比率的答案。

select c.*,d.username,d.user_id
from users d
join  (
    SELECT b.*,a.question
    FROM `questions` a
    left join answers b
    on a.q_id=b.q_id
    WHERE a.`cat_id` = 8
    group by b.q_id) c
on c.user_id=d.user_id

如果试试这个会怎样:

SELECT c.*,d.username,d.user_id
FROM users d
JOIN (
    SELECT b.*,a.question
    FROM `questions` a
    LEFT JOIN (
        SELECT t1.*
        FROM answers t1
        JOIN (
            SELECT q_id, max(rate) AS rate FROM answers GROUP BY q_id
        ) t2
        ON t1.q_id = t2.q_id AND t1.rate = t2.rate
    ) b ON a.q_id=b.q_id
    WHERE a.`cat_id` = 8
    GROUP BY b.q_id) c ON c.user_id=d.user_id

因为您没有提供一些样本数据和期望的结果,所以这可能不会像您预期的那样工作。

已编辑:

SELECT q.*, a.*
FROM questions q
LEFT JOIN (
    SELECT t1.*, u.user_id, u.username
    FROM answers t1
    INNER JOIN questions t3 ON t1.q_id = t3.q_id AND t3.cat_id = 8
    INNER JOIN (
        SELECT q_id, max(rate) AS rate FROM answers GROUP BY q_id
    ) t2
    ON t1.q_id = t2.q_id AND t1.rate = t2.rate
    LEFT JOIN users u ON t1.user_id = u.user_id
    ORDER BY t1.a_id LIMIT 1
) a 
ON q.q_id = a.q_id
WHERE q.cat_id = 8