2008-10-26 16 views
15

Wyobraźmy mam tabeli jak poniżej:Jak liczyć unikalne rekordy i uzyskać liczbę tych unikalnych w tabeli przy użyciu SQL?

id: Produkt: shop_id

1: Koszykówka: 41

2: Piłka nożna: 41

3: Rocket: 45

4: Samochód: 86

5: Samolot: 86

Oto przykład dużego centrum internetowego, w którym znajdują się sklepy sprzedające jeden klient, dzięki czemu klient może wybrać więcej produktów z każdego sklepu i kupić go w jednym koszyku.

Jednak nie jestem pewien, czy istnieje jakakolwiek składnia SQL, która pozwala mi po prostu uzyskać unikalne parametry shop_ids i łączną liczbę produktów tych sklepów w koszyku klienta. Więc chciałbym dostać coś takiego:

Shop 41 ma 2 produkty

Sklep 45 jeden produkt

Shop 86 dwa Produkt

mogę zrobić, aby zgarnąć zapytań SQL poprzez tabelę, aby jakiś ['shop_id'] ['number_of_products'] zmienna tablicowa, która przechowałaby wszystkie produkty 'shop_ids, a następnie "unikatowe" - zwiększ i policz, ile razy musiałam wyciąć jeszcze jeden shop_id, aby pozostał trochę, ale to wydaje się być dużo bezużytecznych skryptów.

Jeśli masz dobry pomysł, proszę, daj mi znać.

Odpowiedz

31

To jest dokładnie to, do czego służą funkcje agregujące. Tworzysz jeden wiersz danych wyjściowych dla każdej grupy wierszy w tabeli. Pogrupuj je według shop_id i policz ile wierszy znajduje się w każdej grupie.

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

(1) po Count oznacza, który parametr po SELECT będzie się liczył? – Skuta

+2

Nie, (1) nie jest odniesieniem do żadnej kolumny, jest to tylko wartość całkowita 1. Bardziej typowe jest używanie COUNT (*) lub COUNT (nazwa kolumny). Glomek używa COUNT (1) jako stałej wartości całkowitej, ponieważ niektórzy ludzie uważają, że jest to szybsze niż odwoływanie się do kolumny. –

+0

Optymalizator * powinien * dbać o to, aby liczba (*) zajmowała tyle samo czasu co liczba (1). Myślę, że niektórzy z optymistów tego nie robią. – yfeldblum