在YEAR查询时,Mysql查询奇怪的结果集

时间:2012-07-12 13:41:52

标签: mysql

好的,这是我的问题。我试图在这些年里每月获得一些专辑。 这是我的查询

SELECT DATE(a.date), COUNT(a.id) 
FROM album a 
JOIN event e ON e.id = a.event_id  
WHERE  YEAR(a.date) >= 2001 
AND e.client_id = 89 
GROUP BY MONTH(a.date) 
ORDER BY a.date DESC

返回的结果是

+--------------+-------------+
| DATE(a.date) | COUNT(a.id) |
+--------------+-------------+
| 2011-09-09   |          15 |
| 2011-08-26   |           9 |
| 2010-01-01   |          28 |
| 2006-03-03   |          20 |
| 2005-12-02   |          20 |
| 2005-11-11   |          15 |
| 2005-10-07   |          13 |
| 2005-07-01   |          12 |
| 2005-06-03   |           6 |
| 2005-05-06   |          18 |
| 2005-04-15   |          15 |
| 2005-02-04   |          22 |
+--------------+-------------+
12 rows in set (0.00 sec)

此结果集缺少2012年的结果 但如果我写这个

SELECT DATE(a.date), COUNT(a.id)
FROM album a 
JOIN event e ON e.id = a.event_id 
WHERE 
YEAR(a.date) > 2005
AND e.client_id = 89 GROUP BY MONTH(a.date)
ORDER BY a.date DESC;

现在我到了2012年,但我错过了2005年:/有人可以向我解释一下吗?

+--------------+-------------+
| DATE(a.date) | COUNT(a.id) |
+--------------+-------------+
| 2012-06-01   |           2 |
| 2012-05-04   |          14 |
| 2012-04-06   |          13 |
| 2011-12-02   |          10 |
| 2011-11-04   |           9 |
| 2011-10-07   |          10 |
| 2011-09-09   |           9 |
| 2011-08-26   |           6 |
| 2010-01-01   |          26 |
| 2006-07-07   |           8 |
| 2006-03-03   |          19 |
| 2006-02-03   |          16 |
+--------------+-------------+
12 rows in set (0.01 sec)

1 个答案:

答案 0 :(得分:2)

您正在按MONTH进行分组,因此我相信您的所有年度数据都会合并为一个计数(请注意,每次获得12行,每月1行)。我认为你可以按年份和月份分组来解决这个问题......

GROUP BY YEAR(a.date)
GROUP BY MONTH(a.date)

(对于第一种情况,无论如何,对于第二种情况,你不会通过调用year > 2005获得2005年的数据,如同愚蠢指出的那样)