2010-05-14 15 views
9

golpea la mesa:MySQL Query para obtener el recuento de valores únicos?

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 

Como se puede ver, hay siguientes son los golpes únicos para los distintos tapa:

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

Así que, básicamente, necesito una consulta que devolverá el siguiente:

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

¿Alguien sabe cómo conseguirlo?

Respuesta

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

He reformateado su código al marcar cada línea con 4 espacios. Consulte la ayuda de formateo a la derecha de la pantalla de edición (y +1 para la respuesta correcta) – lexu

+0

+1 para obtener una buena respuesta (y usted también me adelantó). Perdona mi edición, pero me tomé la libertad de eliminar un paréntesis adicional (no equilibrado). –

-2

Se necesita un grupo del uso por:

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

Esto devolverá el número total de accesos, accesos no el único. –

6

hasta que empiece a entrar en consultas muy complicados, SQL se hace para que se lea como una sentencia bastante natural. Entonces, primero, si puede describir exactamente lo que quiere de su consulta, ya ha escrito la mitad del SQL.

En este caso, se puede describir el problema como:

Obtener lid y el recuento total de IP única de mi mesa para cada lid.

Lo único que queda es traducir esto, utilizando palabras clave SQL. Los importantes aquí son:

  • obtener ->SELECT
  • recuento ->COUNT
  • única ->DISTINCT
  • aggregate..for cada <campo> - >SELECT <aggregate function>..GROUP BY <field>

lo tanto, su frase anterior empieza a parecerse a:

SELECTlid y el agregado de COUNTDISTINCTIPFROM mi mesa GROUP BYlid.

Extracción de palabras innecesarias, y limpiarlo a utilizar la sintaxis SQL deja la pregunta final:

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

+1: Para enviar primero una respuesta con el formato correcto y sin ningún error. –

1
SELECT lid, COUNT(DISTINCT IP) 
FROM hits 
GROUP BY lid 
Cuestiones relacionadas