SQL-Abfrage für nur einmal vorkommende Werte

Hilflos05

Grünschnabel
Hallo,

ich versuche mit einer SQL-Abfrage aus einer wie folgt aussehenden Datenbanktabelle

IDAutorKategorie
1HansRoman
2FrankRoman
3HansComic
4HansSport
5FrankHeimat

heraus zu bekommen, in wieviel Kategorien die Autoren als einzige erfaßt sind. Das Ergebnis sollte also lauten:
Hans2
Frank1

Code:
SELECT Autor, COUNT(Kategorie) FROM Tabelle WHERE COUNT(Kategorie)=1

bringt keinen Erfolg, was ich mittlerweile auch nachvollziehen kann. Irgendwie finde ich keinen Ansatz; ich habe schon an irgendwas mit UNIQUE gedacht, aber das ist scheinbar nur eine Spalteneigenschaft.
 
Bin mir nicht sicher ob du das meinst oder nicht, aber probiers mal aus:
Code:
select distinct * from TABELLE
 
Mit distinct habe ich es auch schon erfolglos versucht. Das prüft aber leider nicht die Anzahl der insgesamt in der Kategorie vorhandenen Autoren.
 
mysql?
Zuerst die Kategorien auswählen welche nur einmal vorkommen. Dann, ein COUNT(DISTINCT ) über die Kategorien

SQL:
SELECT
	t.autor,
	COUNT(DISTINCT t.kategorie)
FROM
	table1 AS t
	-- Die Kategorien die nur einmal vorkommen
	INNER JOIN (
			SELECT kategorie
			FROM table1
			GROUP BY kategorie
			HAVING COUNT(*) = 1
		) AS kats
		ON t.kategorie = kats.kategorie 
GROUP BY
	t.autor
 
Zuletzt bearbeitet von einem Moderator:
Ah ok. Verstehe jetzt was du suchst:
Code:
 select ID, AUTOR, count(KATEGORIE)  from TABELLE 
group by KATEGORIE having count(*)

Hoffe es stimmt so, habe es nur aus dem Kopf gemacht.
Überprüfe das mal und falls Fehler da sind, verbessere sie selbstständig ;)
 
SQL:
having count(*)
Bringt gar nix. Was soll count(*) für einen Wert haben?
 
Zuletzt bearbeitet von einem Moderator:
Ja. Aber HAVING vergleicht Werte (Wertet True/False aus). Fast wie WHERE, ausser das HAVING nach dem Gruppieren ausgeführt wird und WHERE vor davor.
Also, mit was sollen die gezählten Werte deiner Meinung nach verglichen werden?

Eine Funktionierende Lösung steht weiter oben von mir getestet und gepostet.
 
Ja. Aber HAVING vergleicht Werte (Wertet True/False aus). Fast wie WHERE, ausser das HAVING nach dem Gruppieren ausgeführt wird und WHERE vor davor.
Also, mit was sollen die gezählten Werte deiner Meinung nach verglichen werden?

Eine Funktionierende Lösung steht weiter oben von mir getestet und gepostet.

Achja ja stimmt. Du hast recht.
Da müsste dahinter ">= 1"
 
Das ganze SQL ist trotzdem ziemlich falsch. Es gibt 'HANS 2' zurück.
Du machst ein GROUP BY kategorie. Zugleich einen SELECT auf ID und Autor. Diese werden automatisch ebenfalls dem GROUP BY zugeordnet...

Teste doch dein SQL mal. Und dann testet du meins.....
 

Neue Beiträge

Zurück