我需要创建一个视图,该视图存储来自另一个userId作为其列之一的每个userId的前200行。
找到了一种在SELECT
中使用用户定义变量来实现此目的的方法,但是MySQL不允许在SELECT
中使用变量的视图。
这是视图中使用的SELECT
语句的一部分:
select *,@num:= if(@userId = userId, @num + 1, 1) as row_number,
@userId := userId as dummy from (SELECT @userId:=0, @num:=0) as init
是否可以用功能替换@userId
和@num
?类似的例子会有很大的帮助!!
答案 0 :(得分:0)
考虑以下内容......
SELECT * FROM results;
+----+------------+--------+-------+-------+
| id | discipline | member | event | value |
+----+------------+--------+-------+-------+
| 1 | 1 | 2 | 4 | 10 |
| 2 | 1 | 1 | 4 | 8 |
| 3 | 1 | 2 | 5 | 9 |
| 4 | 2 | 3 | 5 | 9 |
| 5 | 1 | 2 | 6 | 11 |
| 6 | 1 | 2 | 7 | 11 |
| 7 | 1 | 2 | 1 | 11 |
| 8 | 1 | 2 | 3 | 7 |
| 9 | 1 | 1 | 8 | 8 |
+----+------------+--------+-------+-------+
说我想获得前三名'价值'每个成员的结果。如果出现平局,我会采取较低的“事件”。第一...
SELECT x.*
, COUNT(*) rank
FROM results x
JOIN results y
ON y.member = x.member
AND (y.value > x.value OR (y.value = x.value AND y.event <= x.event))
GROUP
BY x.member
, x.value
, x.event
HAVING COUNT(*) <=3;
+----+------------+--------+-------+-------+---------+
| id | discipline | member | event | value | rank |
+----+------------+--------+-------+-------+---------+
| 2 | 1 | 1 | 4 | 8 | 1 |
| 9 | 1 | 1 | 8 | 8 | 2 |
| 7 | 1 | 2 | 1 | 11 | 1 |
| 5 | 1 | 2 | 6 | 11 | 2 |
| 6 | 1 | 2 | 7 | 11 | 3 |
| 4 | 2 | 3 | 5 | 9 | 1 |
+----+------------+--------+-------+-------+---------+