簡體   English   中英

在mysql中每組行的前N個創建視圖

[英]Create a view with top N per group rows in mysql

我需要創建一個視圖,該視圖存儲另一個表中每個userId的前200行,該表具有userId作為其列之一。 找到了一種使用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替換為函數? 類似的例子將有很大幫助!!

考慮以下...

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 |
+----+------------+--------+-------+-------+

假設我想獲得每個成員的前3個“價值”結果。 如果出現平局,我將首先參加較低的“賽事” ...

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 |
+----+------------+--------+-------+-------+---------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM