2010-05-14 14 views
9

Hits Tabela:Zapytanie MySQL, aby uzyskać liczbę unikatowych wartości?

hid | lid | IP 
1 | 1 | 123.123.123.123 
2 | 1 | 123.123.123.123 
3 | 2 | 123.123.123.123 
4 | 2 | 123.123.123.123 
5 | 2 | 123.123.123.124 
6 | 2 | 123.123.123.124 
7 | 3 | 123.123.123.124 
8 | 3 | 123.123.123.124 
9 | 3 | 123.123.123.124 

Jak widać, nie są następujące unikalnych odsłon dla poszczególnych pokrywką:

lid 1: 1 unique hit 
lid 2: 2 unique hits 
lid 3: 1 unique hit 

Więc w zasadzie muszę zapytanie, które zwróci następujący:

lid | uhits | 
1 | 1  | 
2 | 2  | 
3 | 1  | 

Ktoś wie, jak to zdobyć?

Odpowiedz

19
Select lid, count(distinct IP) as uhits 
from hits 
group by lid 
+1

Sformatowałem kod przez wcięcie każdej linii 4 spacji. Zajrzyj do pomocy formatującej po prawej stronie ekranu edycji (i +1, aby uzyskać poprawną odpowiedź) – lexu

+0

+1, aby uzyskać dobrą odpowiedź (i mnie też to pobijesz). Wybacz moją edycję, ale skorzystałem z możliwości usunięcia dodatkowego (niezbilansowanego) zamkniętego nawiasu. –

-2

Trzeba grupę użytkowego przez:

SELECT lid, count(*) 
    FROM Table 
    GROUP BY lid 
+2

ta zwróci całkowitą liczbę trafień, nie unikalne ciosy. –

6

aż zacznie się do bardzo skomplikowanych zapytań SQL jest wykonany tak, że brzmi całkiem jak wyrok naturalnego. Po pierwsze, jeśli możesz opisać dokładnie to, czego chcesz, zapytaj już w połowie o SQL.

W tym przypadku można opisać problem jak:

Get lid i łącznej liczby unikalnych IP z moim stole dla każdego lid.

Pozostaje tylko przetłumaczyć to, używając słów kluczowych SQL. Ważnymi te tutaj są:

  • dostać ->SELECT
  • Ilość ->COUNT
  • wyjątkowy ->DISTINCT
  • aggregate..for każdego <dziedzinie> - >SELECT <aggregate function>..GROUP BY <field>

Więc twój zdanie powyżej zaczyna wyglądać następująco:

SELECTlid i zagregowanej COUNT z DISTINCTIPFROM moim stole GROUP BYlid.

Usuwanie zbędnych słów i czyszczenia go używać składni SQL pozostawia ostateczną zapytanie:

SELECT hits.lid, COUNT(DISTINCT hits.IP) AS uhits 
FROM hits 
GROUP BY hits.lid 
+0

+1: Po pierwsze, aby przesłać odpowiedź z poprawnym formatowaniem i bez żadnych błędów. –

1
SELECT lid, COUNT(DISTINCT IP) 
FROM hits 
GROUP BY lid 
Powiązane problemy