2015-02-10 63 views
0

查詢需要計算每個用戶的總分數。對於每個qid,具有較低時間的用戶獲得一個點並且總點是所有點的總和。下面的查詢只是返回每個用戶的總嘗試次數,需要一種方式來返回點數。MySql查詢來計算每個用戶的分數

Incorrect Query=select user, count(*) from (select * from (select * from xyz order by 
time ASC) as temp1 group by temp1.user,temp1.qid) AS temp2 group by user 

DB:

CREATE TABLE xyz (
id INT PRIMARY KEY AUTO_INCREMENT, 
    user VARCHAR(20), 
    time INT, 
    qid INT 
); 

INSERT INTO xyz VALUES ( 1 , 'abc' , 15 , 1); 
INSERT INTO xyz VALUES ( 2 , 'abc' , 6 , 1); 
INSERT INTO xyz VALUES ( 3 , 'xyz' , 11 , 1); 
INSERT INTO xyz VALUES ( 4 , 'abc' , 4 , 1); 
INSERT INTO xyz VALUES ( 5 , 'xyz' , 13 , 2); 
INSERT INTO xyz VALUES ( 6 , 'abc' , 11 ,2); 
INSERT INTO xyz VALUES ( 7 , 'abc' , 9 , 3); 
INSERT INTO xyz VALUES ( 8 , 'xyz' , 10 , 3); 
INSERT INTO xyz VALUES ( 9 , 'xyz' , 2 , 3); 
INSERT INTO xyz VALUES ( 10 , 'xyz' , 2 , 4); 

預期輸出:

USER Score 
abc 2 
xyz 2 

輸出說明:

For qid=1, abc has lower time so 1 point to abc 
For qid=2, abc has lower time so 1 point to abc 
For qid=3, xyz has lower time so 1 point to xyz 
For qid=4, xyz has lower time so 1 point to xyz 

sqlfiddle Link

謝謝

+0

因此每次 blckbird 2015-02-10 13:32:29

+0

@blckbird對於每個qid用戶的得分較低的時間爲該qid增加 – ak111in 2015-02-10 13:35:31

回答

3

您需要查找每個qid用戶是「第一」的次數。以下是一種方法:

select xyz.user, count(*) as score 
from xyz join 
    (select qid, min(time) as mintime 
     from xyz 
     group by qid 
    ) q 
    on xyz.qid = q.qid and xyz.time = q.mintime 
group by xyz.user; 
+0

感謝按要求工作 – ak111in 2015-02-10 13:54:06

相關問題