2008-10-26 6 views
15

Imagine I Tabelle wie folgt aussehen:Wie man einzigartige Aufzeichnungen zählt und die Anzahl dieser Uniques in der Tabelle mit SQL erhält?

id: Produkt: Arbeitsplatz_id

1: Basketball: 41

2: Fußball: 41

3: Rakete: 45

4: Auto: 86

5: Flugzeug: 86

Jetzt ist dies ein Beispiel für große Internet-Mall, wo es Geschäfte gibt, die an einen Kunden verkaufen, so kann der Kunde mehr Produkte von jedem Geschäft wählen und es in einem Korb kaufen.

Allerdings bin ich mir nicht sicher, ob es eine SQL-Syntax gibt, die es mir erlaubt, einfach shop_ids und die Gesamtzahl der Produkte dieser Shops im Kundenkorb zu erhalten. Also würde ich so etwas wie:

Shop-41 hat 2 Artikel

Shop-45 ein Produkt

Shop-86 zwei Produkte

Ich kann SQL-Abfragen macht Tabelle zu schaufeln bis hin zu einer Art zu machen von ['shop_id'] ['number_of_products'] Array-Variable, die alle shop_ids aller Produkte speichern würde, dann "unique them" - up und zähle, wie oft ich noch ein shop_id ausschneiden musste, um etwas übrig zu haben, aber das scheint nur so viel nutzloses Scripting.

Wenn Sie eine nette und nette Idee, bitte, lassen Sie mich wissen.

Antwort

31

Dies ist genau die Art von Dingen, für die Aggregatfunktionen sind. Sie erstellen für jede Zeilengruppe in der Tabelle eine Ausgabezeile. Gruppiere sie nach shop_id und zähle, wie viele Zeilen in jeder Gruppe sind.

select shop_id, count(1) from TABLE_NAME 
    group by shop_id 
+0

(1) nach Anzahl bedeutet, welcher Parameter nach SELECT zählen soll? – Skuta

+2

Nein, das (1) ist kein Verweis auf irgendeine Spalte, es ist nur der Integer-Wert 1. Es ist typischer, COUNT (*) oder COUNT (Spaltenname) zu verwenden. Glomek verwendet COUNT (1) als konstanten Integer-Wert, da einige Leute glauben, dass dies schneller ist als eine Spalte zu referenzieren. –

+0

Der Optimierer * sollte * darauf achten, dass Zählung (*) genau so lange dauert wie Zählung (1). Ich denke, einige Optimierer nicht. – yfeldblum

Verwandte Themen