2 COUNTS beim SELECT

B

ByeBye 154279

Hallo,

Ich habe eine Tabelle mit 2 Spalten.
In der einen Spalte sind Wörter und in der anderen Ziffern.

Ich möchte jetzt gerne wissen, wie hoch die Anzahl der Ziffern ist,bei den jedes Wort beisteht.

#Spalte 1 Spalte2
123 WORT1
123 WORT2
123 WORT3
231 WORT2
342 WORT1
543 WORT3
523 WORT 1

WIe man sehen kann hat Spalte1 123 alle Wörter (Wort1 2 3)


Ich möchte jetzt gerne wissen, wieviele Spalte1-Einträge es gibt, bei dem alle Wörter stehen?!

select count(Spalte1) AS `Anzahl` from mitarbeiterqualifikation having `Anzahl` = count(distinct(Spalte2));

Diese Syntax ist noch falsch , da sie ja die gesamte Anzahl der Spalte 1 überprüft

Danke
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

select count(Spalte1) AS `Anzahl` from mitarbeiterqualifikation having `Anzahl` = count(distinct(Spalte2));
Mit dieser Abfrage zählst du zuerst die Anzahl der Zeilen in der Tabelle (count(Spalte1) AS `Anzahl`) und prüfst das Ergebnis dann darauf, ob es der Anzahl der unterschiedlichen Werte in Spalte 2 entspricht (HAVING-Klausel).

Diese Syntax ist noch falsch , da sie ja die gesamte Anzahl der Spalte 1 überprüft
An der Syntax ist nichts auszusetzen, nur die Semantik ist nicht die gewünschte.

Mein Vorschlag:
SQL:
SELECT Spalte1 FROM mitarbeiterqualifikation
GROUP BY Spalte1
HAVING COUNT(DISTINCT(Spalte2)) =
  (SELECT COUNT(DISTINCT(Spalte2))
   FROM mitarbeiterqualifikation)
Die Anzahl der Zeilen im Ergebnis entspricht dann dem gesuchten Wert.

Grüße,
Matthias
 
Cool

danke

Und wie kann ich jetzt nur die Anzahl anzeigen lassen?
Wenn ich ein COUNT() davor setze, erhalte ich einen Fehler
 
Und wie kann ich jetzt nur die Anzahl anzeigen lassen?
Jede mir bekannte *SQL-Schnittstelle bietet dafür eine passende Funktion an, bei PHP in Verbindung mit MySQL wäre das beispielsweise [phpf]mysql_num_rows[/phpf]. Wenn du es unbedingt als Anfrage-Ergebnis haben willst, dann ginge das z.B. so:
SQL:
SELECT COUNT(*) FROM
  (SELECT Spalte1 FROM mitarbeiterqualifikation
   GROUP BY Spalte1
   HAVING COUNT(DISTINCT(Spalte2)) =
     (SELECT COUNT(DISTINCT(Spalte2))
      FROM mitarbeiterqualifikation))
  AS result

Grüße,
Matthias
 
Zurück