SQL Abfrage gesucht

sir.hacks.alot

Aktives Mitglied
Thread Starter
Dabei seit
10.03.2005
Beiträge
2.408
Reaktionspunkte
115
Hallo,

ich verzweifele gerade an einer meiner Meinung nach ziemlich einfachen Aufgabenstellung.

ich habe eine Tabelle mit 4 Spalten

ID ItemID Geschlecht Kommentar

Die Aufgabe ist die Kommentare gruppiert nach Geschlecht und ItemID zu zählen.

Beispiel Für das Ergebnis:

Code:
ItemID    Geschlecht  Kommentar AnzahlKommentare
     1     Männlich     Super        25
     1     Weiblich     grottig      23
Bei allen bisherigen Versuchen bekam ich insgesamt eine falsche Anzahl von Kommentaren zurück und die Leerkommentare wurden ausgelassen.

Gruß Thomas
 
Code:
SELECT SUM(AnzahlKommentare) as summe, ItemID, Geschlecht
FROM Kommentare
GROUP BY ItemID, Geschlecht

Spontaner Versuch, keine Ahnung ob das klappen könnte ;)
 
So kann es ja nicht klappen, da ich in der Ausgangstabelle die Kommentare noch nicht Gruppiert und Gezählt habe
 
So kann es ja nicht klappen, da ich in der Ausgangstabelle die Kommentare noch nicht Gruppiert und Gezählt habe

Haha, sorry. Den kleinen Satz über deiner Tabelle hab ich glatt übersehen. Moment, geh nochmal in meine Denkkammer.

So:

Code:
SELECT COUNT(ID) as anzahl, ItemID, Geschlecht
FROM Kommentare
GROUP BY ItemID, Geschlecht

Nur was die Spalte "Kommentar" in deiner Ergebnistabelle soll, weiß ich nicht.
 
  • Gefällt mir
Reaktionen: sir.hacks.alot
Hier stehen kommentare zu Bildern drin. Das ist hier eigentlich die fast wichtigste Spalte. Hier soll die Häufigkeit von gleichen Kommentaren getrennt nach Geschlecht und ItemID ausgegeben werden um nachher auszuwerten welcher Kommentar zu welchem Bild am häufigsten aufgetreten ist.

Dafür hatte ich gedacht müsste ich nur die Abfrage die Oben gemacht hast wie folgt ergänzen:

Code:
SELECT COUNT(ID) as Anzahl,ItemID, Geschlecht, Kommentar
FROM Komentar
GROUP BY ItemID, Geschlecht, Kommentar Order By Anzahl DESC
 
OK das hat jetzt soweit funktioniert.

Jetzt stehe ich vor einem noch viel grösseren Problem...

Der Kollege für den ich das mache hätte das ganze gerne in der Form

Code:
ItemID | Anzahl | Kommentar | Davon Männlich | Davon Weiblich
 
Hallo,

da gibt es mehrere Möglichkeiten. Ich bevorzuge da folgende Variante (ist aber Oracle-spezifisch):

Code:
SELECT
    COUNT(ID) as Anzahl, 
    ItemID, 
    Kommentar,
    sum(decode(Geschlecht, 'männlich', 1, 0)) as "Davon männlich",
    sum(decode(Geschlecht, 'weiblich', 1, 0)) as "Davon weiblich",
FROM
    Komentar
GROUP BY 
    ItemID, 
    Kommentar
Order By
    Anzahl DESC

Die Strings 'männlich' und 'weiblich' müssen natürlich zu den Feldinhalten der Spalte Geschlecht passen.

Gruß
Dirk
 
  • Gefällt mir
Reaktionen: sir.hacks.alot
Danke das hat sehr geholfen,

Jetzt wusste ich überhaupt wonach ich mal googlen muss um den richtigen Befehl zu finden.

In MySQL-Syntax sieht das dann so aus:

Code:
SELECT
    COUNT(ID) as Anzahl, 
    ItemID, 
    Kommentar,
    SUM(IF(Geschlecht='männlich',1,0)) as M,
    SUM(IF(Geschlecht='weiblich',1,0)) as W,
FROM
    Komentar
GROUP BY 
    ItemID, 
    Kommentar
Order By
    Anzahl DESC
 
Zuletzt bearbeitet:
Zurück
Oben Unten