我有以下表结构:
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;
答案 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;