0

次のデータベースがあります(小さな例):

ID | username | action  | points | example
1  | matt     | login   | 3      | 135
2  | john     | comment | 6      | 156
3  | john     | login   | 6      | 189
4  | peter    | login   | 8      | 125
5  | peter    | login   | 8      | 165

login同じアクションと 5 を超えるポイント数 (すべてのアクション)を持つユーザー名を選択してグループ化したいと考えました。すべてのアクションは でなければなりませんlogin。したがって、このユーザー名に関連するjohnアクションがあるため、結果は なしになります。comment

関連する質問: MySQL: グループ化された行のみを選択する

考えられる解決策:

SELECT    username, COUNT(*) AS cnt, SUM(points) AS points
FROM      tableX AS t
GROUP BY  username
HAVING    MIN(action) = 'login'
   AND    MAX(action) = 'login' 
   AND    SUM(points) > 5 ;

そして結果:

username | COUNT | points(SUM)
peter    | 2     | 16

しかし、IDが最も高い行の他のすべての値を結果に追加したいと思います。サブクエリを試しましたが、正しい解決策が見つかりませんでした。

予想された結果:

ID | username | COUNT | points(SUM) | points | example
5  | peter    | 2     | 16          | 8      | 165

何か考えはありますか?どうもありがとうございました!

SQL フィドル

4

1 に答える 1

0

これを試して:

SELECT DISTINCT MAX(ID), username, action, SUM(points) as pointsSum, MAX(points) as pointsMax, MAX(example) as example 
FROM tableX 
WHERE action='login' GROUP BY username 
于 2013-05-28T19:03:13.640 に答える