我正在使用 MySQL,我很难获得每月的计数,包括没有记录的月份。
这是我的表格“Plays”:
idplay idplayer day ------ -------- --- 1 26 17-11-2015 2 37 22-12-2015 3 65 24-04-2016 4 12 16-05-2016 5 37 17-05-2016 6 37 30-05-2016 7 14 30-06-2016
我想获取玩家“37”在过去 6 个月中每个月的游戏次数,当他没有游戏时获得 0。
像这样的东西:
Month Playtimes ---- ------- 11-2015 0 12-2015 1 01-2016 0 02-2016 0 03-2016 0 04-2016 0 05-2016 5
最佳答案
为了实现这一点,正如评论中所建议的,我创建了一个简单列出月份的新关系(我使用了过去一年的值)。
然后它使用左外部连接将这些匹配到 Plays
表中的月份,仅对应于与您指定的球员匹配的比赛。
然后使用查询对这些行进行计数,将空值归为零。
创建语句在这里;
CREATE TABLE Months (day DATE);
INSERT INTO Months VALUES
('2015.11.1'),('2015.12.1'),('2016.1.1'),
('2016.2.1'), ('2016.2.1'), ('2016.3.1'),
('2016.4.1'), ('2016.5.1'), ('2016.6.1'),
('2016.7.1'), ('2016.8.1'), ('2016.9.1'),
('2016.10.1'), ('2016.11.1');
以下查询显示玩家 37 在过去 6 个月中每月的游戏
SELECT DATE_FORMAT(M.day,'%Y-%m') AS Month, COUNT(idPlayer) AS Playtimes
FROM Months M
LEFT JOIN (SELECT *
FROM Plays
WHERE Plays.idPlayer = 37) P
ON MONTH(M.day) = MONTH(P.day)
AND YEAR(M.day) = YEAR(P.day)
WHERE M.day BETWEEN (NOW() - INTERVAL 6 Month)
AND NOW()
GROUP BY M.day;
我已将其创建为 SQL fiddle以及在这里工作并产生以下结果:
关于mysql - 每周/每月查询的 SQL 请求,即使不存在记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37373777/