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 № 1Bitte 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