先排序再分组 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
我有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