I have a question for you today. I have this table
oddId | risk | resultCode | finalResult |
---|---|---|---|
1 | 6.66667 | 2 | 1 |
2 | 7.14286 | 2 | 1 |
3 | 8.33333 | 2 | 1 |
4 | 8.33333 | 2 | 2 |
5 | 10 | 2 | 1 |
6 | 10 | 2 | 2 |
7 | 10 | 2 | 2 |
8 | 10 | 2 | 2 |
9 | 11.1111 | 1 | 2 |
10 | 11.1111 | 2 | 2 |
11 | 12.5 | 2 | 1 |
12 | 12.5 | 2 | 2 |
13 | 12.5 | 1 | 1 |
14 | 12.5 | 2 | 1 |
15 | 12.5 | 2 | 1 |
16 | 12.5 | 1 | 2 |
17 | 12.5 | 1 | 1 |
18 | 12.5 | 1 | 2 |
19 | 12.5 | 2 | 1 |
20 | 14.2857 | 2 | 2 |
21 | 14.2857 | 1 | 2 |
22 | 14.2857 | 2 | 2 |
23 | 16.6667 | 2 | 2 |
24 | 16.6667 | 1 | 2 |
25 | 16.6667 | 1 | 1 |
For this job I need
- group the rows by "risk"
- count how many rows have the same "risk" value
- Count how many rows have the same value in "resultCode" and "finalResult"
With SELECT `risk`, `resultCode`, `finalResult`, (SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END FROM matches WHERE `resultCode` = t.`finalResult` AND `oddId` = t.`oddId`) equal FROM matches t WHERE `finalResult` IS NOT NULL ORDER BY `t`.`risk` ASC
i can get "equal" column.
risk | resultCode | finalResult | equal |
---|---|---|---|
6.66667 | 2 | 1 | 0 |
7.14286 | 2 | 1 | 0 |
8.33333 | 2 | 1 | 0 |
8.33333 | 2 | 2 | 1 |
10 | 2 | 1 | 0 |
10 | 2 | 2 | 1 |
10 | 2 | 2 | 1 |
10 | 2 | 2 | 1 |
11.1111 | 1 | 2 | 0 |
11.1111 | 2 | 2 | 1 |
12.5 | 2 | 1 | 0 |
12.5 | 2 | 2 | 1 |
12.5 | 1 | 1 | 1 |
12.5 | 2 | 1 | 0 |
12.5 | 2 | 1 | 0 |
12.5 | 1 | 2 | 0 |
12.5 | 1 | 1 | 1 |
12.5 | 1 | 2 | 0 |
12.5 | 2 | 1 | 0 |
14.2857 | 2 | 2 | 1 |
14.2857 | 1 | 2 | 0 |
14.2857 | 2 | 2 | 1 |
16.6667 | 2 | 2 | 1 |
16.6667 | 1 | 2 | 0 |
16.6667 | 1 | 1 | 1 |
with SELECT `risk`, COUNT(`risk`) as total FROM `matches` WHERE `finalResult` IS NOT NULL GROUP BY `risk` ORDER BY `risk` DESC
I can get "total" column.
Now I would also like to have a column where I group by "risk" and sum the "equal" columns (into "corrects"), to have...
risk | corrects | total |
---|---|---|
6.66667 | 0 | 1 |
7.14286 | 0 | 1 |
8.33333 | 1 | 2 |
10 | 3 | 4 |
11.1111 | 1 | 2 |
12.5 | 3 | 9 |
14.2857 | 2 | 3 |
16.6667 | 2 | 3 |
but I don't know how to do... Can anyone help me please? Thank you very much
MySQL - MyISAM - 5.6.48-88.0
CodePudding user response:
Your first sentence is too confusing, so you don’t see the answer clearly
SELECT
`risk`,
COUNT( `risk` ) AS total,
sum(case when resultCode = finalResult then 1 else 0 end) corrects
FROM
`matches`
WHERE
`finalResult` IS NOT NULL
GROUP BY
`risk`
ORDER BY
`risk` DESC