在 SQL 上,我可以有一个基于多个参数计数的比率列吗?

on SQL can I have a ratio column based on a count of multiple parameters?

在此查询中,我在下面提供的图像中得到以下结果。但是我想更进一步,将计数转换为获胜/总获胜的比率。

然而,当我使用第二个查询(在底部)时,我得到了无效使用组函数的错误。

解释一下,计数基于查询中每个唯一的列组合的分组

有人可以解释一下我做错了什么吗?

SELECT  summoner_id, monster_1_id, monster_2_id, monster_3_id,
        monster_4_id, monster_5_id, monster_6_id, Count(*)/
        ( SELECT  SUM(Count(*)) ) AS Ratio
    FROM  battledata.history
    GROUP BY  summoner_id, monster_1_id, monster_2_id, monster_3_id,
        monster_4_id, monster_5_id, monster_6_id ;

SELECT  summoner_id, monster_1_id, monster_2_id, monster_3_id,
        monster_4_id, monster_5_id, monster_6_id, Count(*)/
        ( SELECT  SUM(Count(*)) ) AS Ratio
    FROM  battledata.history
    GROUP BY  summoner_id, monster_1_id, monster_2_id, monster_3_id,
        monster_4_id, monster_5_id, monster_6_id ;

您需要使用 COUNT(*) 作为子查询(如果有 where 子句则它需要在两个查询中匹配):

SELECT
    summoner_id,
    monster_1_id,
    monster_2_id,
    monster_3_id,
    monster_4_id,
    monster_5_id,
    monster_6_id,
    COUNT(*) / (SELECT COUNT(*) FROM battledata.history) AS Ratio
FROM battledata.history
GROUP BY
    summoner_id,
    monster_1_id,
    monster_2_id,
    monster_3_id,
    monster_4_id,
    monster_5_id,
    monster_6_id

编辑:

如果使用 MySQL 8 或更高版本,您可以使用 window 函数。更正语法后,您的原始查询将起作用:

SELECT
    summoner_id,
    monster_1_id,
    monster_2_id,
    monster_3_id,
    monster_4_id,
    monster_5_id,
    monster_6_id,
    COUNT(*) / SUM(COUNT(*)) OVER () AS Ratio
FROM battledata.history
GROUP BY
    summoner_id,
    monster_1_id,
    monster_2_id,
    monster_3_id,
    monster_4_id,
    monster_5_id,
    monster_6_id
SELECT  summoner_id, monster_1_id, monster_2_id, monster_3_id, monster_4_id, monster_5_id, monster_6_id
        ,COUNT(*) / (SELECT COUNT(*) FROM battledata.history) AS Ratio
FROM battledata.history
GROUP BY summoner_id ,monster_1_id,monster_2_id,monster_3_id
        ,monster_4_id,monster_5_id,monster_6_id

这应该可以满足您的需求。如果您需要添加 WHERE 子句,请记住在两个查询中添加相同的子句