GROUP BY und Zählt nicht die erwarteten Ergebnisse
Ich mache einige SQL-übungen, aber ich bin stecken in der, die ich beschreiben werde.
Gibt es eine Tabelle namens Produkt, das auf 3 Säulen: maker, Modell und Typ.
Dies ist das Ergebnis select * from product
Der übung, sagt dieser:
Finden Sie heraus, Entscheidungsträger, die produzieren nur die Modelle des selben Typs und der Anzahl von Modellen, die 1 überschreitet.
Ableiten: maker geben.
Die richtige Abfrage zurückgeben soll diese:
Mein Ansatz war zuerst, die Macher nur eine Art von Produkt und schließen anschließend die Entscheidungsträger, die haben nur ein Modell. Zu tun, dass ich die folgende Abfrage, und es gibt das richtige Ergebnis, außer der Tatsache, dass ich nur Schaffe, zur Anzeige der Hersteller, aber nicht der Typ und die übung fordert für beide.
Dies ist meine Abfrage:
SELECT
DISTINCT maker
FROM product
GROUP BY maker
HAVING COUNT(distinct type) = 1
AND
COUNT(model)> 1
Und es gibt diese:
dann, wenn ich versuche, die Anzeige die Art, wie auch von dies zu tun:
SELECT
DISTINCT maker,type
FROM product
GROUP BY maker,type
HAVING COUNT(distinct type) = 1
AND
COUNT(model)> 1
dies ist, was ich bekomme:
Haben Sie eine Idee, warum dies nicht wie erwartet funktioniert? Was würden Sie tun, um dieses problem zu lösen? Ich hab schon versucht das zu lösen, das seit über 3 Stunden ohne Erfolg. 🙁 Helft mir bitte.
- die Anzahl der übung ist, dass?
- Es ist die Aufgabe 14
- Bonus-Tipp: verwenden Sie niemals DISTINCT und GROUP BY zusammen in der gleichen " Ebene AUSWÄHLEN. Es sollte nie notwendig sein (DISTINCT ist eigentlich nur eine vereinfachte/reduzierte form von GROUP BY), aber es ist oft verwirrend und hat das Potenzial für unerwartete und inkonsistente Ergebnisse. (Ich glaube nicht, dass dies das problem hier aber.)
- oh, ich habe nicht abgeschlossen, noch, also werde ich nur meine Augen schließen und aufhören, verstehen, Antworten
- Vielen Dank für die Beratung.
- Ich habe alles getan, von 1 bis 25, aber ich übersprang die 14, weil ich gearbeitet hatten, war es für fast zwei Stunden und kamen dann zurück haha.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nur die Rücksendung dieser Gruppen mit genau einem Typ, können Sie einfach
MAX
/MIN
um herauszufinden, was dietype
in dieser Gruppe ist.Beim hinzufügen
type
in dieGROUP BY
Liste, es wird Ihnen eine Ergebnis Zeile für jede Kombination vonmaker,type
das ist, warum Ihr beim zweiten Versuch nicht funktioniert.Versuchen Sie zu gruppieren nach Hersteller und Typ in die zweite Abfrage, die isolieren, die eine beliebige Kombination von Hersteller und Typ, hat genau einen Typ (der immer true sein, da jede Gruppe enthält eine unterschiedliche paar Hersteller und Typ) und aus zwei oder mehr Modellen. Möchten Sie nur group by-maker.
Versuchen. Es funktionierte für mich.
Versuchen Sie dies: