2009-06-16 22 views
99

es algo como esto sea posible:Usando DISTINCT y COUNT juntas en un MySQL Query

SELECT DISTINCT COUNT(productId) WHERE keyword='$keyword' 

Lo que quiero es conseguir el número de ID de producto único que se asocia con una palabra clave. El mismo producto se puede asociar dos veces con una palabra clave, o más, pero me gustaría solamente 1 hora de ser contados por ID producto

Respuesta

221

uso

SELECT COUNT(DISTINCT productId) from table_name WHERE keyword='$keyword' 
+0

Se actualizó la respuesta ya que está cerca de convertirse en una gran respuesta y fue sintácticamente incorrecta. –

+0

Im contra respuestas que no ofrecen un rendimiento óptimo cuando se trata de bases de datos. Es fundamental mantener los estándares de rendimiento. Me gustaría ir con la respuesta de @alistair-hart. – JDuarteDJ

+0

Gran hombre. Funciona –

30

Eras cerca :-)

select count(distinct productId) from table_name where keyword='$keyword' 
+0

Se actualizó la respuesta ya que está cerca de convertirse en una buena respuesta y fue sintácticamente incorrecta. –

+0

bajo rendimiento – JDuarteDJ

-4

¿No es mejor con un grupo? Algo así como:

SELECT COUNT(*) FROM t1 GROUP BY keywork; 
+1

Quiere la cantidad de productID distintos. Su consulta devuelve el número de filas para cada palabra clave. – David

41

me gustaría hacer algo como esto:

Select count(*), productid 
from products 
where keyword = '$keyword' 
group by productid 

que le dará una lista como

count(*) productid 
---------------------- 
5   12345 
3   93884 
9   93493  

Esto le permite ver la cantidad de cada idproducto distinta ID está asociado con la palabra clave.

+0

De bajo rendimiento, no puedo aceptar esto sobre la respuesta de Alistair. – JDuarteDJ

14

FYI, esto es probablemente más rápido,

SELECT count(1) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp 

que esto,

SELECT COUNT(DISTINCT productId) WHERE keyword='$keyword' 
+15

¿Te importa explicar por qué? Soy curioso. – lpacheco

+0

No estoy seguro de si es más rápido, pero la forma de contar varias columnas con la palabra clave distinct – VladL

+0

Fantástica respuesta. Su respuesta es al menos 100 veces más rápida en mi caso. Una ligera alteración para entender el código @ Alistair es 'SELECT count (*) FROM (SELECCIONAR distinct productId WHERE palabra clave = '$ keyword') temp' –

5

¿Qué demonios de todo este anteras de trabajo

que es demasiado simple

si quieres una lista de cuánto ID de producto en cada tecla palabra aquí es el código

SELECT count(productId), keyword FROM `Table_name` GROUP BY keyword; 
+0

Gracias por ese comentario, no por la respuesta purista a su pregunta exacta, pero tal vez lo que está buscando para, y de todos modos útil. – Leo