按组别获取表格的百分比

问题描述 投票:1回答:1

我正在为一个地方联赛做一个预测游戏,一个比赛由它的SPIELTAG(playday)和它的MATCH_NR定义。

一场比赛由它的SPIELTAG(比赛日)和它的MATCH_NR.一个预测有一个比赛和一个结果(ERGA, ERGB)。

我有一个表,像这个小提琴 https:/www.db-fiddle.comfo4NXPFfzod39LpMaTzqz3r0

我得到的输出是计算每个比赛日和每场比赛的结果。

| SPIELTAG | MATCH_NR | ERGA | ERGB | AMOUNT |
| -------- | -------- | ---- | ---- | ------ |
| 4        | 1        | 7    | 1    | 1      |
| 4        | 1        | 7    | 2    | 2      |
| 4        | 1        | 7    | 3    | 5      |
| 4        | 1        | 7    | 4    | 1      |
| 4        | 2        | 1    | 7    | 1      |
| 4        | 2        | 2    | 7    | 6      |
| 4        | 2        | 3    | 7    | 3      |

我想实现的是,在金额栏的旁边有这样的内容

| SPIELTAG | MATCH_NR | ERGA | ERGB | AMOUNT | PERC | 
| -------- | -------- | ---- | ---- | ------ | ---- | 
| 4        | 1        | 7    | 1    | 1      | 11.1%| => 1 / 9
| 4        | 1        | 7    | 2    | 2      | 22.2%| => 2 / 9
| 4        | 1        | 7    | 3    | 5      | 55.5%| => 5 / 9
| 4        | 1        | 7    | 4    | 1      | 11.1%| => 1 / 9
| 4        | 2        | 1    | 7    | 1      | 11.1%| => 1 / 9
| 4        | 2        | 2    | 7    | 5      | 55.5%| => 5 / 9
| 4        | 2        | 3    | 7    | 3      | 33.3%| => 3 / 9

其中PERC是每场比赛日的选秀百分比SPIELTAG。基本上,结果是多久,每场比赛SPIELTAG,MATCH_NR的元组(ERGA,ERGB)预测。

我发现了一个帖子,在那里我可以得到所有选择的百分比,但不限制在比赛日,比赛元组。

一个例子:比赛1(Spieltag 4,比赛1)有9个预测。1x: 7-1 2x: 7-2 5x: 7-3 1x: 7-4 __ 9x -> ALL_COUNTS_PER_MATCH(每场比赛)

所以PERC应该是类似于'AMOUNT' ALL_COUNTS_PER_MATCH的东西。

mysql count percentage
1个回答
1
投票

我认为你需要另一组由。

SELECT `t`.`SPIELTAG` AS `SPIELTAG`,
       `t`.`MATCH_NR` AS `MATCH_NR`,
       `t`.`TEAM_A`   AS `ERGA`,
       `t`.`TEAM_B`   AS `ERGB`,
       count(0)       AS `AMOUNT`,
       COUNT(0) / MAX(A.TOTAL_AMOUNT) -- MIN would also work
FROM `TIPPSPIEL_TIPP` `t`
         JOIN (
    -- Calculate the row count by each different spieltag & match_nr combination
    SELECT `t`.`SPIELTAG`,
           `t`.`MATCH_NR`,
           count(0) AS `TOTAL_AMOUNT`
    FROM `TIPPSPIEL_TIPP` `t`
    GROUP BY `t`.`SPIELTAG`, `t`.`MATCH_NR`
) A USING (SPIELTAG, MATCH_NR)
GROUP BY `t`.`SPIELTAG`, `t`.`MATCH_NR`, `t`.`TEAM_A`, `t`.`TEAM_B`
;

https:/www.db-fiddle.comfo4NXPFfzod39LpMaTzqz3r3


1
投票

检查这个,但将在Mysql 8中工作,而不是更低的版本。

https:/www.db-fiddle.comfo4NXPFfzod39LpMaTzqz3r4

SELECT DISTINCT  `t`.`SPIELTAG` AS `SPIELTAG`,
       `t`.`MATCH_NR` AS `MATCH_NR`,
       `t`.`TEAM_A` AS `ERGA`,
       `t`.`TEAM_B` AS `ERGB`,
       COUNT(0) OVER (PARTITION BY `t`.`SPIELTAG`,
                                   `t`.`MATCH_NR`,
                                   `t`.`TEAM_A`,
                                   `t`.`TEAM_B`) AS AMOUNT,
                     COUNT(0) OVER (PARTITION BY `t`.`SPIELTAG`,
                                                 `t`.`MATCH_NR`,
                                                 `t`.`TEAM_A`,
                                                 `t`.`TEAM_B`) / COUNT(CONCAT(SPIELTAG, MATCH_NR)) OVER (PARTITION BY `t`.`SPIELTAG`,
                                                                                                                      `t`.`MATCH_NR`) AS match_count
FROM `TIPPSPIEL_TIPP` `t`
© www.soinside.com 2019 - 2024. All rights reserved.