2008-10-26 16 views
15

Imaginez que j'ai table comme ceci:Comment compter des enregistrements uniques et obtenir le nombre de ces uniques dans une table en utilisant SQL?

id: Produit: shop_id

1: Basket-ball: 41

2: Football: 41

3: Rocket: 45

4: Voiture: 86

5: Plan: 86

Maintenant, ceci est un exemple de grand centre commercial Internet, où il y a des magasins qui vendent à un client, ainsi le client peut choisir plus de produits de chaque magasin et l'acheter dans un seul panier.

Cependant, je ne suis pas sûr qu'il y ait une syntaxe SQL qui me permette d'obtenir simplement des shop_ids uniques et le nombre total de produits de ces boutiques dans le panier client. Alors j'obtenir quelque chose comme:

Boutique 41 a 2 produits

Boutique 45 un produit

Boutique 86 deux produits

Je peux faire des requêtes SQL pour écoper par table pour faire une sorte de ['shop_id'] ['number_of_products'] variable de tableau qui stockerait tous les shop_ids de produits, puis les "uniques" - et compte combien de fois j'ai dû couper un shop_id de plus pour en avoir quelques-uns mais cela semble juste beaucoup de scripts inutiles.

Si vous avez une bonne idée, s'il vous plaît, faites le moi savoir.

Répondre

31

C'est exactement le genre de chose pour lequel les fonctions d'agrégation sont. Vous créez une ligne de sortie pour chaque groupe de lignes de la table. Regroupez-les par shop_id et comptez le nombre de lignes dans chaque groupe.

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

(1) après comptage signifie quel paramètre après SELECT doit être compté? – Skuta

+2

Non, le (1) n'est pas une référence à une colonne, c'est juste la valeur entière 1. Il est plus fréquent d'utiliser COUNT (*) ou COUNT (nom de la colonne). Glomek utilise COUNT (1) comme valeur entière constante, car certaines personnes pensent que cela est plus rapide que de référencer une colonne. –

+0

L'optimiseur * doit * veiller à ce que le compte (*) prenne autant de temps que le compte (1). Je suppose que certains optimiseurs ne le font pas. – yfeldblum