2017-04-26 8 views
0

Hier ist ein Datenbankschema:Mit COUNT (Distinct) in SQL

customers (custID, firstname, familyname, town, state) 
orders (orderID, custlD, date) 
lineitems (orderID, itemlD, quantity, despatched) 
items (itemID, description, unitcost, stocklevel) 
itemSupplier (supplierID, itemlD) 
supplier (supplierID, sName, sAddress, telephoneNo, delivers) 

Hier ist die Frage:

Wenn wir, dass das Beschreibungsfeld in der Artikel-Tabelle einen Satz verwendet vordefinierte nehmen Kategorien (z. B. Zelte, Spaten, usw.), dann können wir Fragen beantworten wie: "Wie viele verschiedene Arten von Zelt verkauft der Laden?" Schreiben Sie eine SQL-Abfrage, um alle Artikel aufzulisten, für die mehr als ein Artikel desselben Typs verkauft wird, und um zu ermitteln, wie viele verschiedene Typen dieses Artikels verkauft werden (dh eine Liste mit Spaltenüberschriften: Beschreibung; "wie viele Typen verkauft werden ').

Ich versuchte DISTINCT in COUNT() Funktion wie folgt zu verwenden:

SELECT description, count(DISTINCT itemID) AS how_many_types_are_sold 
FROM items 
GROUP BY description 

Ich bin nicht sicher, ob es eine richtige Nutzung der Funktionen ist oder nicht. Gibt es einen Ratschlag, um diese Frage zu lösen? Vielen Dank im Voraus: D

+2

Nun, haben Sie versucht, diese Abfrage auszuführen? –

+0

Fügen Sie einige Beispieltabellendaten, das aktuelle Ergebnis und das erwartete Ergebnis hinzu - alles als formatierter Text. – jarlh

+0

@TimBiegeleisen, jarlh Das sind alles Papierarbeiten. Es gibt keine genauen Daten. Das tut mir leid. –

Antwort

0

Diese Abfrage:

SELECT description, count(DISTINCT itemID) AS how_many_types_are_sold 
FROM items 
GROUP BY description; 

auf der Basis Ihrer Beschreibung, tut es das, was Sie tun möchten. Aber . . . Sie sollten DISTINCT nur bei Bedarf verwenden.

Es ist sehr wahrscheinlich, dass eine Spalte namens itemID in einer Tabelle mit dem Namen items eigentlich der Primärschlüssel für die Tabelle ist. Wenn dies der Fall ist, hat jede Zeile einen eindeutigen Wert, und COUNT(DISTINCT) ist redundant. Basierend auf dieser Annahme, können Sie einfach die Anzahl der Zeilen zählen, die passen:

SELECT description, count(*) AS how_many_types_are_sold 
FROM items 
GROUP BY description; 

Dieses sehr bevorzugt (weil count(*) führt besser als count(distinct)), unter der Annahme, dass itemID in der Tabelle eindeutig ist.

+0

Vielen Dank für Ihre Antwort: D –

0

Von meinem Verständnis, Sie brauchen nicht unterscheidbar in Ihrer SELECT-Anweisung, wie die Gruppe durch den Willen Gruppe jedes Element basierte Beschreibung, was bedeutet,

SELECT description, count(*) AS how_many_types_are_sold FROM items GROUP BY description 

aber Sie können obige Aussage verwenden, wenn Nur wenn alle Kategorien vordefiniert sind, wie Sie in Ihrer Frage erwähnt haben, werden andere nicht definierte Beschreibungen erwartet. In diesem Fall benötigen Sie eine Art Mapping-Tabelle, um alle Beschreibungen mit allen Kategorien abzubilden, die Sie haben.

+0

Vielen Dank für Ihre Antwort: D –