创建一个具有重复数据库记录的排名和统计信息

svdrlsy4  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(567)

今天我想得到一个帮助,在我的数据库中创建每个用户的分数。我有个问题:

SELECT
    r1.id,
    r1.nickname,
    r1.fecha,
    r1.bestia1,
    r1.bestia2,
    r1.bestia3,
    r1.bestia4
    r1.bestia5
FROM
    reporte AS r1
INNER JOIN
    ( SELECT
          nickname, MAX(fecha) AS max_date
      FROM
          reporte
      GROUP BY
          nickname ) AS latests_reports 
ON latests_reports.nickname = r1.nickname
AND latests_reports.max_date = r1.fecha
ORDER BY
    r1.fecha DESC

这是一个朋友从这个网站上帮助我获得的“每个用户在每一天的最后一个记录”,基于此,我正在寻找如何计算结果排名每天,每周或每月,为了使用统计图表或谷歌datastudio,我尝试了下一个:

select id, nickname, sum(bestia1), sum(bestia2), etc...

但它没有给出我想要的完整结果。这就是我寻求帮助的原因。另外,我知道datastudio过滤器,我可以显示许多图表,但我仍然可以完全计数。
例如,一个玩家在过去30天内报告了265个怪物被杀死,但是当我在datastudio中使用我的查询时,它只计算最新的值(可以是12)。所以我想正确地计算,以便与图表一起使用
使用我的查询筛选的sql记录:

lyfkaqu1

lyfkaqu11#

这将为您提供每个用户在过去30天内杀死的怪物数量:

SELECT
    nickname,
    sum(bestia1) as bestia1,
    sum(bestia2) as bestia2,
    sum(bestia3) as bestia3,
    sum(bestia4) as bestia4,
    sum(bestia5) as bestia5
FROM
    reporte 
WHERE   fecha >= DATE_ADD(curdate(), interval -30 day)
GROUP BY nickName
ORDER BY
wydwbb8l

wydwbb8l2#

获取每个用户在最近x天内杀死的怪物总数的一种通用方法,并像您在评论中建议的那样计算分数,可以如下所示:

SET @daysOnHistory = X; -- Where X should be an integer positive number (like 10).

SELECT
    nickname,
    SUM(bestia1) AS total_bestia1_killed,
    SUM(bestia2) AS total_bestia2_killed,
    SUM(bestia3) AS total_bestia3_killed,
    SUM(bestia4) AS total_bestia4_killed,
    SUM(bestia5) AS total_bestia5_killed,
    SUM(bestia1 + bestia2 + bestia3 + bestia4 + bestia5) AS total_monsters_killed,
    SUM(bestia1 +  2 * bestia2 + 3 * bestia3 + 4 * bestia4 + 5 * bestia5) AS total_score
FROM
    reporte
WHERE
    fecha >= DATE_ADD(DATE(NOW()), INTERVAL -@daysOnHistory DAY)
GROUP BY
    nickname
ORDER BY
    total_score DESC

现在,如果您想要相同的计算,但只考虑当前一周的天数(假设一周从星期一开始),则需要替换前一个 WHERE 下一个条款:

WHERE
    fecha >= DATE_ADD(DATE(NOW()), INTERVAL -WEEKDAY(NOW()) DAY)

更重要的是,如果您想要所有相同的,但只考虑到当前月份的天数,您需要替换 WHERE 条款签署人:

WHERE
    MONTH(fecha) = MONTH(NOW())

要评估当前年度的统计数据,需要替换 WHERE 条款签署人:

WHERE
    YEAR(fecha) = YEAR(NOW())

最后,对于您可以使用的特定天数范围的评估,例如:

WHERE
    DATE(fecha) BETWEEN CAST("2018-10-15" AS DATE) AND CAST('2018-11-10' AS DATE)

我希望这本指南能帮助你,澄清你的看法。

相关问题