Ich habe eine einfache Konfiguration: 2 Tabellen in einer Viele-zu-viele-Beziehung verknüpft, so gab es mir 3 Tabellen.GROUP BY & COUNT mit mehreren Parametern
Tabelle Autor:
idAuthor INT
name VARCHAR
Tabelle Veröffentlichung:
idPublication INT,
title VARCHAR,
date YEAR,
type VARCHAR,
conference VARCHAR,
journal VARCHAR
Tabelle author_has_publication:
Author_idAuthor,
Publication_idPublication
Ich versuche, alle Autoren-Namen zu erhalten, die mindestens zwei Papiere veröffentlicht in Konferenz SIGMOD und Konferenz PVLDB. Im Moment habe ich das erreicht, aber ich habe immer noch ein doppeltes Ergebnis. Meine Frage:
SELECT author.name, publication.journal, COUNT(*)
FROM author
INNER JOIN author_has_publication
ON author.idAuthor = author_has_publication.Author_idAuthor
INNER JOIN publication
ON author_has_publication.Publication_idPublication = publication.idPublication
GROUP BY publication.journal, author.name
HAVING COUNT(*) >= 2
AND (publication.journal = 'PVLDB' OR publication.journal = 'SIGMOD');
kehrt
+-------+---------+----------+
| name | journal | COUNT(*) |
+-------+---------+----------+
| Renee | PVLDB | 2 |
| Renee | SIGMOD | 2 |
+-------+---------+----------+
Wie Sie das Ergebnis richtig sehen kann, ist aber verdoppelt, wie ich den Namen nur 1 Mal möchten.
Andere Frage, wie man den Zahlparameter für nur eine Konferenz ändert, zum Beispiel alle Autoren, die mindestens 3 SIGMOD und mindestens 1 PVLDB veröffentlicht haben?
dies nicht funktioniert, weil es gibt auch die Autoren, die weniger als 2 Veröffentlichung für PVLDB und SIGMOD Konferenz haben, ist die Schwierigkeit, separat jede Konferenz Publikationen –
Ich missverstanden die Frage, sollte jetzt funktionieren. @Mayeulsgc – sagi
Danke, es funktioniert, ich hatte eine Menge Probleme mit der Verwendung von GROUP BY, WHERE und HAVING in einer Anfrage –