我有這樣的資料:資料分為角色 id ,角色 id 1 是參與者,角色 id 2 是評估者,
每個評估者將獲得相同數量的參與者
id | Name | roleid
-----------------
1 | a | 1 |
-------------------
2 | b | 1 |
-------------------
3 | c | 1 |
-------------------
4 | d | 1 |
-------------------
5 | e | 2 |
-------------------
6 | f | 2 |
如何根據roleid均勻匹配資料
所以我將這些資料插入到一個表中,我希望結果是這樣的:
id | participant | evaluator
-----------------------------
1 | 1 | 5 |
----------------------------
2 | 2 | 5 |
-----------------------------
3 | 3 | 6 |
-----------------------------
4 | 4 | 6 |
-----------------------------
如您所見,評估者 id 5 將獲得參與者 1 和 2 ,而評估者 6 將獲得參與者 3 和 4 ,依此類推,如果有 3 個評估者,則它將除以 3。
uj5u.com熱心網友回復:
一種方法是選擇參與者和評估者row_number
,并mod
根據row_number
評估者的總數為每個參與者進行計算,它為您提供 1,2...n-1,0,1,2...n-1,.. .,您可以將其與row_number
for 評估器進行匹配
http://sqlfiddle.com/#!9/9f71cb/3
CREATE TABLE users (
id INT,
name VARCHAR(10),
roleid INT
);
INSERT INTO users VALUES ( 1, 'a', 1 );
INSERT INTO users VALUES ( 2, 'b', 1 );
INSERT INTO users VALUES ( 3, 'c', 1 );
INSERT INTO users VALUES ( 4, 'd', 1 );
INSERT INTO users VALUES ( 5, 'e', 2 );
INSERT INTO users VALUES ( 6, 'f', 2 );
SELECT a.id participant, b.id evaluator
FROM (
SELECT id, @RN := @RN 1 AS RN
FROM users
JOIN (SELECT @RN := 0) AS r
WHERE roleid = 1
) a
JOIN (
SELECT id, @RN2 := @RN2 1 AS RN
FROM users
JOIN (SELECT @RN2 := 0) AS r
WHERE roleid = 2
) b
JOIN (
SELECT COUNT(*) AS counts
FROM users
WHERE roleid = 2
) c
WHERE a.RN % c.counts = b.RN - 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/318727.html
上一篇:MySQL在大復合主鍵上尋找分頁