mysql - 每周/每月查询的 SQL 请求,即使不存在记录

标签 mysql count

我正在使用 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以及在这里工作并产生以下结果:

enter image description here

关于mysql - 每周/每月查询的 SQL 请求,即使不存在记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37373777/

相关文章:

MySql Left Join 不保留左表

php - 根据邮政编码自动填写国家和城市,反之

php - 使用 PHP-PDO->Prepare Statement 将 HTML 代码插入 MySQL 数据库

c++ - 计算 map 中相同值的数量

count - Mathematica 中的列联表

php - SQL/PHP : Show top 3 most sold products from database

mysql - 获取 COUNT 将 NULL 值返回为 0 的问题

java - 使用 java (SE) 将阿拉伯字符插入 mySQL DB

mysql - MySQL 中多余的列,我可以删除它吗?

php - 在 PHP 中,我应该将 WHILE 与 mysql 结果还是数组一起使用?