需要关于如何在单个MySQL查询中执行此操作的建议吗
这可以在一个MySQL查询中实现吗?基本上,我需要根据用户的响应数量对其进行排序。我有两张桌子需要关于如何在单个MySQL查询中执行此操作的建议吗,mysql,Mysql,这可以在一个MySQL查询中实现吗?基本上,我需要根据用户的响应数量对其进行排序。我有两张桌子 table "users": id username ------------------ 1 hunter 2 loserville 还有一个 table "responses": id user_id response ------------------------------- 1 1 yes 1
table "users":
id username
------------------
1 hunter
2 loserville
还有一个
table "responses":
id user_id response
-------------------------------
1 1 yes
1 2 yes
1 1 no
1 1 yes
我需要这样的东西
SELECT users.id
FROM users
UNION ALL
SELECT COUNT(responses.id) As num_responses
FROM responses
WHERE user_id = users.id
ORDER BY num_responses DESC
不幸的是,它不起作用。有什么建议吗?如果你感到困惑,请告诉我!谢谢您的时间。我想您想使用的是GROUP BY子句
SELECT users.id, users.username, count(*) as responses
FROM users LEFT JOIN responses
ON users.Id = responses.user_id
GROUP BY users.id, users.username
ORDER BY count(*) DESC
您可能需要这样的查询
SELECT users.id, COUNT(*) AS responses
FROM users JOIN responses ON users.id = responses.user_id
GROUP BY user_id ORDER BY responses DESC
(如果不想从users表中获得任何信息,可以省略联接,只对响应进行查询
连接列出所有用户及其响应,然后统计条目数。
SELECT u.id, COUNT(r.id) AS cnt
FROM users u
LEFT JOIN
responses r
ON r.user_id = u.id
AND r.response = 'yes'
GROUP BY
u.id
ORDER BY
cnt DESC
或者这个:
SELECT u.id,
(
SELECT COUNT(*)
FROM responses r
WHERE r.user_id = u.id
AND r.response = 'yes'
) cnt
FROM users u
ORDER BY
cnt DESC
前者在
InnoDB
中通常更快,后者在MyISAM
中更快,感谢您的响应,但我不得不做一个左连接,这对meThat有效。事实上,左连接也会列出没有做出任何响应的人。但是,我不确定COUNT(*)将正常工作。对于尚未发布的用户,它可能会列出1个响应,而不是0。