/ / Die MySQL-Datumsabfrage gibt nur ein Jahr zurück, wenn mehrere vorhanden sind - mysql, date, count

Die MySQL-Datumsabfrage gibt nur ein Jahr zurück, wenn mehrere existieren - mysql, date, count

Ich bin Teilzeit - Designer / Entwickler mit einemTeilzeitfotogeschäft. Ich habe eine Datenbank mit Fotos mit verschiedenen Metadaten erhalten. Ich möchte die Datenbank abfragen und eine Liste der Jahre zurückgeben, in denen Fotos aufgenommen wurden, sowie die Anzahl der Fotos, die in diesem Jahr aufgenommen wurden.

Kurz gesagt, ich möchte eine Liste, die so aussieht:

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

Hier ist die Abfrage, die ich verwende:

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

Anstatt alle möglichen Jahre herauszureißen (die Datenbank enthält Fotos aus 2010-2008), ist dies das einzige Ergebnis:

2010 (35 photos)

Ich habe eine Menge unterschiedlicher Syntax ausprobiert, aber an diesem Punkt gebe ich nach und bitte um Hilfe!

Antworten:

3 für die Antwort № 1

Bitte nicht in Anführungszeichen setzen year.
Das sagt MySQL das year ist eine Zeichenfolge; was es nicht ist.

Verwenden Sie im Alias ​​auch keinen Alias GROUP BY.

Versuche dies:

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

Bearbeiten:
In den meisten RDBMSs ist der SELECT Klausel wird zuletzt interpretiert.
Daher können wir keinen Spaltenalias in anderen Klauseln dieser speziellen Abfrage verwenden.


0 für die Antwort № 2

T-SQL-Lösung:

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