MySQL日期查询只返回一年,如果存在多个

MySQL日期查询只返回一年,如果存在多个,mysql,date,count,Mysql,Date,Count,我是一名兼职设计师/开发人员,从事兼职摄影业务。我有一个附有各种元数据的照片数据库。我想查询数据库并返回照片拍摄年份的列表,以及当年拍摄的照片数量 简而言之,我想要一个如下所示的列表: 2010 (35 photos) 2009 (67 photos) 2008 (48 photos) 以下是我使用的查询: SELECT YEAR(date) AS year, COUNT(filename) as quantity FROM photos WHERE visible='1' GROUP BY

我是一名兼职设计师/开发人员,从事兼职摄影业务。我有一个附有各种元数据的照片数据库。我想查询数据库并返回照片拍摄年份的列表,以及当年拍摄的照片数量

简而言之,我想要一个如下所示的列表:

2010 (35 photos)
2009 (67 photos)
2008 (48 photos)
以下是我使用的查询:

SELECT YEAR(date) AS year, COUNT(filename) as quantity FROM photos WHERE visible='1' GROUP BY 'year' ORDER BY 'year' DESC
这是唯一的结果,而不是大量生产所有可能的年份(数据库包括2010-2008年的照片):

2010 (35 photos)

我已经尝试了很多不同的语法,但在这一点上,我屈服了,并寻求帮助

不要单引号
年份

那就是告诉MySQL,
year
是一个字符串;但事实并非如此

此外,不要在
分组依据中使用别名

试试这个:

SELECT YEAR(date) AS year, COUNT(filename) as quantity 
FROM photos 
WHERE visible='1' 
GROUP BY YEAR(date)
ORDER BY YEAR(date) DESC
编辑:
在大多数关系数据库中,
SELECT
子句是最后解释的。
因此,我们不能在该特定查询的其他子句中使用列别名

T-SQL解决方案:

SELECT 
   [text] = 
      cast(year(date) as varchar) + ' ('+cast(count(filename) as varchar) + 
      'photo'+case when count(filename)>1 then 's' else '' end + ')'
   ,
   [year] = year(date)
FROM photos 
WHERE  visible='1' 
GROUP BY YEAR(date)
ORDER BY YEAR(date) DESC

对它工作得很好,我现在理解错误了。谢谢你,亚当。后续问题:为什么不使用别名?它确实有效,而且似乎更有效,但可能不是@Bowman:添加了有关为什么不在
分组依据中使用别名的更多信息。您的查询可能在MySQL中工作,但可能无法在其他RDBMS中工作。如果您坚持使用MySQL,这对您来说可能不是问题。很高兴查询现在起作用了:-)太好了。我正在使用MySQL,但我很感谢您的澄清。谢谢你花时间解释。