2016-11-25 4 views
1

私はMySQLデータベースを持っており、人によって最低3ポイントを合計したいと思います。MySQLはユーザーによって最低3つの値を取得します

+--------+--------+ 
| Person | Points | 
+--------+--------+ 
| 1  | 15  | 
| 1  | 10  | 
| 1  | 5  | 
| 1  | 10  | 
| 2  | 5  | 
| 2  | 4  | 
| 2  | 3  | 
| 2  | 2  | 
| 3  | 1  | 
| 3  | 1  | 
| 3  | 1  | 
+--------+--------+ 

私が何をしたいの結果:

+-------+-----+ 
| 1  | 25 | 
| 2  | 9 | 
| 3  | 3 | 
+-------+-----+ 

しかし、私は本当にこの問題を解決する方法を失っています。これは、今まで私のクエリです:

CREATE TABLE `mytable` (
    `person` int(11) DEFAULT NULL, 
    `points` int(11) DEFAULT NULL 
) ; 

INSERT INTO `mytable` (`person`, `points`) VALUES 
(1, 15), 
(1, 10), 
(1, 5), 
(1, 10), 
(2, 5), 
(2, 4), 
(2, 3), 
(2, 2), 
(3, 1), 
(3, 1), 
(3, 1); 
+0

を見る[_Groupwise MAX_(http://mysql.rjweb.org/doc.php/groupwise_max)。 –

答えて

2

は制限rows.Rowの数を制限していないためにヘルパーとして内部クエリ内の行番号を使用します。

SELECT person, SUM(points) FROM (SELECT SUM(points) FROM table 
GROUP BY person ORDER BY points ASC LIMIT 3) 

これは、スクリプトを作成し、私のSQLです重複した値の問題を避けるために。テストされていませんが、それはうまくいくはずです、フィドルを作成するにはあまりにも怠惰です。

SELECT Person,SUM(Points) FROM 
(SELECT Person,Points, 
CASE Person 
     WHEN @person THEN @rank:= @rank+ 1 
     ELSE @rank:= 1 
    END AS rank, 
    @person:= person 
FROM t, (SELECT @rank:= 0,@person:='') x 
ORDER BY Points ASC)y 
WHERE y.rank<=3 
GROUP BY Persons 

FIDDLE

+0

私はそれを試しましたが、私が持っているエラーは次のとおりです。フィールドリストに不明なcolumn 'type'があります。 これはテーブルを作成するSQLスクリプトです: 多分あなたは私を助けることができますhttp://sqlfiddle.com ?? 作成スクリプトを追加しました。 – rraayy

+0

@rraayy私の悪い、それを編集しました。 – Mihai

関連する問題