I am trying to get the 3 top games by user for a website.
I am first trying to sum the most played games and then try to group them for each user limiting them to 3.
Here is what I reached so far
SELECT *
FROM
(SELECT DISTINCT ACCOUNT_ID FROM account_tran_all) users
LEFT JOIN
(SELECT ACCOUNT_ID, GAME_ID, -SUM (AMOUNT1+AMOUNT2+AMOUNT3) AS ACTIONS
FROM admin_all.account_tran_all
WHERE TRAN_TYPE = 'GAME_USE'
AND DATETIME >= '2020-08-01'
GROUP BY ACCOUNT_ID, GAME_ID) games ON games.ACCOUNT_ID = users.ACCOUNT_ID
ORDER BY
users.ACCOUNT_ID
It outputs a result similar to this:
+------------+------------------+---------+
| ACCOUNT_ID | GAME_ID | ACTIONS |
+------------+------------------+---------+
| 611525 | 771 | 0.4 |
| 611525 | 82244 | 11.5 |
| 611525 | 82246 | 4 |
| 611525 | 81400039 | 15 |
| 1000029 | 78884 | 30 |
| 1000029 | 98889 | 100 |
| 1000040 | orjyqvinjm3xsp6y | 120 |
| 1000040 | 82200105 | 180 |
| 1000040 | 82245 | 2 |
| 1000040 | 82254 | 7 |
| 1000040 | 82244 | 8 |
| 1000040 | 82242 | 27 |
| 1000040 | instantgame | 1 |
| 1000060 | 82264 | 1 |
| 1000060 | 137000058 | 1 |
| 1000060 | 82200064 | 229 |
| 1000083 | 82254 | 109.4 |
| 1000083 | 82264 | 19.5 |
| 1000083 | 82243 | 6 |
| 1000103 | 80758 | 1.5 |
| 1000103 | 82245 | 51 |
| 1000103 | 82200125 | 300 |
| 1000103 | 81400044 | 0.7 |
+------------+------------------+---------+
As a result, I would like to summarize the top games in terms of action for an ACCOUNT_ID but having an output similar to this, concatenating the games in a single field, or leaving each Game_ID in a single column game1, game2, game3 to be able to have more calculation.
+------------+------------------------+
| ACCOUNT_ID | TOP_GAME |
+------------+------------------------+
| 611525 | 81400039, 82244, 82246 |
| 1000029 | 98889,78884 |
+------------+------------------------+
I add Sample data to be loaded in a sql fiddle:
CREATE TABLE [ACCOUNT_TRAN_ALL] (
[ACCOUNT_ID] int NOT NULL,
[DATETIME] datetime NOT NULL,
[TRAN_TYPE] varchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[AMOUNT] numeric(38,18) NULL,
[GAME_ID] varchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[BRAND_ID] int NULL,
);
INSERT INTO [ACCOUNT_TRAN_ALL]([ACCOUNT_ID], [DATETIME], [TRAN_TYPE], [AMOUNT], [GAME_ID], [BRAND_ID]) VALUES (1001715, '2020-09-23 11:35:48.553', 'GAME_BET', 3.000000000000000000, '82252', 1);
INSERT INTO [ACCOUNT_TRAN_ALL]([ACCOUNT_ID], [DATETIME], [TRAN_TYPE], [AMOUNT], [GAME_ID], [BRAND_ID]) VALUES (1001715, '2020-09-23 11:36:02.363', 'GAME_BET', 1.000000000000000000, '82252', 1);
INSERT INTO [ACCOUNT_TRAN_ALL]([ACCOUNT_ID], [DATETIME], [TRAN_TYPE], [AMOUNT], [GAME_ID], [BRAND_ID]) VALUES (1001713, '2020-09-22 19:00:21.800', 'GAME_BET', 1.000000000000000000, '80100161', 1);
INSERT INTO [ACCOUNT_TRAN_ALL]([ACCOUNT_ID], [DATETIME], [TRAN_TYPE], [AMOUNT], [GAME_ID], [BRAND_ID]) VALUES (1001713, '2020-09-22 19:00:26.373', 'GAME_BET', 1.000000000000000000, '80100161', 1);
INSERT INTO [ACCOUNT_TRAN_ALL]([ACCOUNT_ID], [DATETIME], [TRAN_TYPE], [AMOUNT], [GAME_ID], [BRAND_ID]) VALUES (1001713, '2020-09-22 19:00:33.770', 'GAME_BET', 1.000000000000000000, '80100161', 1);
INSERT INTO [ACCOUNT_TRAN_ALL]([ACCOUNT_ID], [DATETIME], [TRAN_TYPE], [AMOUNT], [GAME_ID], [BRAND_ID]) VALUES (1001713, '2020-09-22 19:00:40.130', 'GAME_BET', 1.000000000000000000, '80100161', 1);
INSERT INTO [ACCOUNT_TRAN_ALL]([ACCOUNT_ID], [DATETIME], [TRAN_TYPE], [AMOUNT], [GAME_ID], [BRAND_ID]) VALUES (1001713, '2020-09-22 19:00:48.940', 'GAME_BET', 1.000000000000000000, '80100161', 1);
INSERT INTO [ACCOUNT_TRAN_ALL]([ACCOUNT_ID], [DATETIME], [TRAN_TYPE], [AMOUNT], [GAME_ID], [BRAND_ID]) VALUES (1001713, '2020-09-22 19:00:55.586', 'GAME_BET', 1.000000000000000000, '85555', 1);
INSERT INTO [ACCOUNT_TRAN_ALL]([ACCOUNT_ID], [DATETIME], [TRAN_TYPE], [AMOUNT], [GAME_ID], [BRAND_ID]) VALUES (1001713, '2020-09-22 19:01:00.770', 'GAME_BET', 1.000000000000000000, '80100161', 1);
INSERT INTO [ACCOUNT_TRAN_ALL]([ACCOUNT_ID], [DATETIME], [TRAN_TYPE], [AMOUNT], [GAME_ID], [BRAND_ID]) VALUES (1001713, '2020-09-22 19:01:04.490', 'GAME_BET', 1.000000000000000000, '80100161', 1);
INSERT INTO [ACCOUNT_TRAN_ALL]([ACCOUNT_ID], [DATETIME], [TRAN_TYPE], [AMOUNT], [GAME_ID], [BRAND_ID]) VALUES (1001713, '2020-09-22 19:01:09.183', 'GAME_BET', 1.000000000000000000, '80100161', 1);
INSERT INTO [ACCOUNT_TRAN_ALL]([ACCOUNT_ID], [DATETIME], [TRAN_TYPE], [AMOUNT], [GAME_ID], [BRAND_ID]) VALUES (1001713, '2020-09-22 19:01:22.703', 'GAME_BET', 1.000000000000000000, '80100161', 1);