MySQL选择较少执行操作的用户

时间:2016-01-04 17:59:49

标签: mysql

我有以下表结构:

ACTIONS

+  userid  +  action  +
+----------+----------+

USERS

+  id      +  name    +
+----------+----------+
+   1      + james    +
+----------+----------+
+   2      + john     +
+----------+----------+

数据示例:

ACTIONS

+  userid  +  action  +
+----------+----------+
+   null   + action1  +
+----------+----------+
+   1      + action2  +
+----------+----------+
+   1      + action3  +
+----------+----------+
+   2      + action4  +
+----------+----------+

我需要一个SELECT查询,它将返回执行较少操作的用户。

如果所有字段都为空(第一次启动)或全部相等(所有用户执行相同的操作),则它可以返回1个用户(rand,asc,desc,它是相同的)。

///////////////////

修改

根据Richard Hamilton的回复,此查询仅适用于已在ACTIONS表中的用户。如果一个或多个user_id为NULL或用户不在ACTIONS中,则不从USERS表中选择

SELECT id FROM users
INNER JOIN actions ON users.id = actions.user_id
GROUP BY user_id
ORDER BY COUNT(user_id)
LIMIT 1;

1 个答案:

答案 0 :(得分:0)

您需要使用GROUP BY。然后我们可以ORDER BY他们执行的操作数量。

要找到编号最小的编号,请使用LIMIT 1

SELECT user_id FROM users
INNER JOIN data ON users.id = data.users_id
GROUP BY action
ORDER BY COUNT(action)
LIMIT 1;