mysql - 如何根据时间(月、年)统计记录?

标签 mysql sql database

我有一个表 (myItems),其中包含一个项目“id”和“date”。现在我想读出,每个月有多少项目(我也想区分2013年10月和2014年10月)。

我开始于:

SELECT Count(okt.id) AS Oktober, Count(nov.id) AS November
FROM    `myItems` as okt,
        `myItems` as nov    
WHERE (okt.date between '2013-10-01' and '2013-10-31') 
   OR (nov.date between '2013-11-01' and '2013-11-30')

但是它打印出一个大得离谱的数字。我做错了什么?

最佳答案

试试这个。这会将数据分成几个月,然后执行 COUNT :

SELECT SUM(CASE WHEN MONTH(date) = 10 THEN 1 ELSE 0 END) AS Oktober
     , SUM(CASE WHEN MONTH(date) = 11 THEN 1 ELSE 0 END) AS November
FROM    `myItems`

演示:SQL Fiddle


集成了 YEAR:

SELECT 2013 as Year
     , SUM(CASE WHEN MONTH(date) = 10 THEN 1 ELSE 0 END) AS Oktober
     , SUM(CASE WHEN MONTH(date) = 11 THEN 1 ELSE 0 END) AS November
FROM    `myItems`
WHERE YEAR(date) = 2013
UNION ALL
SELECT 2014 as Year
     , SUM(CASE WHEN MONTH(date) = 10 THEN 1 ELSE 0 END) AS Oktober
     , SUM(CASE WHEN MONTH(date) = 11 THEN 1 ELSE 0 END) AS November
FROM    `myItems`
WHERE YEAR(date) = 2014;
;

演示:Fiddle


灵感来自@user77318

SELECT YEAR(date) as Year, month(date) as month, count(id) as count 
FROM myItems 
GROUP BY YEAR(date), MONTH(date);

个人推荐这个,比较漂亮。然后你就可以在应用层做所有的展示工作了。

关于mysql - 如何根据时间(月、年)统计记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24056272/

相关文章:

php - 我无法将 drupal 迁移到本地服务器

mysql,alter column删除主键和auto_increment

mysql转储: Error 1317: Query execution was interrupted while running database Backup

sql - 获取用户友好的 SQL Server 产品名称

php - 准备好的语句不适用于 ALTER 表查询

java - Tomcat 中的 Web 应用程序 : reading from a DB works but nothing gets persisted?

database - 如何确定基表?

mysql - 为专用的 mariadb 服务器找到正确的配置——用于巨大的 innodb 表

sql - 28P01--DataGrip 中用户的密码验证失败

mysql - 如何比较行之间的值并找到响应的平均值?