2010-04-19 3 views
1

저는 파트 타임 사진 사업을하는 아르바이트 디자이너/개발자입니다. 다양한 메타 데이터가 첨부 된 사진 데이터베이스가 있습니다. 나는 데이터베이스에 질의를하고 사진이 찍힌 년 목록과 그 해에 찍은 사진의 양을 반환하고 싶다.MySQL의 날짜 쿼리는 복수가 존재하는 경우에만 1 년을 반환합니다.

2010 (35 photos) 
2009 (67 photos) 
2008 (48 photos) 

여기에 내가 사용하고 쿼리의 : 한마디로

, 나는 다음과 같다 목록을 원하는 모든 가능한 년 churning 아웃의 대신

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) 

많은 다른 구문을 시도했습니다. b 내가 도와주고 도움을 청하고있는이 점에서 ut!

답변

3

작은 따옴표로 묶지 마십시오 year.
즉, year이 문자열이라는 것을 MySQL에 알려주고 있습니다. 그렇지 않다.

또한 GROUP BY에는 별칭을 사용하지 마십시오.

이 시도 :

SELECT YEAR(date) AS year, COUNT(filename) as quantity 
FROM photos 
WHERE visible='1' 
GROUP BY YEAR(date) 
ORDER BY YEAR(date) DESC 

편집 : SELECT 절은 마지막으로 해석됩니다 대부분의 RDBMS에서에서
.
그래서 특정 쿼리의 다른 절에서 열 별칭을 사용할 수 없습니다.

+0

예! 그것은 완벽하게 작동하고 나는 지금 실수를 이해합니다. 고마워, 아담. – Bowman

+0

후속 질문 : 별칭을 사용하지 않는 이유는 무엇입니까? 그것은 효과가 있고, 효과적이지만 어쩌면 ... – Bowman

+0

@Bowman : GROUP BY에서 별칭을 사용하지 않는 이유에 대한 자세한 정보를 추가했습니다. 쿼리는 MySQL에서는 작동하지만 다른 RDBMS에서는 작동하지 않을 수 있습니다. MySQL을 사용한다면 문제가되지 않을 수도 있습니다. 이제 쿼리가 작동 중입니다. – bernie

0

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