Usando DISTINCT y COUNT juntos en una consulta MySQL


125

Es posible algo como esto:

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

Lo que quiero es obtener el número de ID de productos únicos que están asociados con una palabra clave. El mismo producto puede asociarse dos veces con una palabra clave, o más, pero me gustaría contar solo 1 vez por ID de producto

Respuestas:


277

utilizar

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

Se actualizó la respuesta, ya que está cerca de convertirse en una gran respuesta y era sintácticamente incorrecta.
Rahul Tripathi

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

Tropecé con esto mientras buscaba algo más y aprendí algo. Siempre he hecho esto con SELECT COUNT(DISTINCT(productId)) from table_name WHERE keyword='$keyword'. Me gusta más tu versión pasando dos parámetros a COUNT( ).
Rockin4Life33

Para mi sorpresa, descubrí que no puede haber un espacio entre "COUNT" y el paréntesis de apertura, al menos en la versión 10.1.41 de MariaDB.
DRosenfeld

61

Haría algo como esto:

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

eso te dará una lista como

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

Esto le permite ver cuántos de cada ID de productid distinto está asociado con la palabra clave.


31

Estabas cerca :-)

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

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

19

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'

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

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

6

Qué demonios de todo este trabajo anteras

es muy simple

si quieres una lista de cuánto productId en cada palabra clave aquí es el código

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

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

4

SELECCIÓN DE PRODUCTO DISTINTO Y CONTADOR DE PANTALLA POR PRODUCTO

para otra respuesta sobre este tipo de pregunta, esta es mi otra respuesta para obtener el recuento de la base del producto en un nombre de producto distinto como este ejemplo a continuación:

Valor de la tabla

select * FROM Product

Nombre de producto contado

SELECT DISTINCT(Product_Name),
(SELECT COUNT(Product_Name) 
from Product  WHERE Product_Name = Prod.Product_Name)  
as `Product_Count`
from Product as Prod

Cuenta de registro: 4; Tiempo de ejecución: 2 ms


-5

¿No es mejor con un grupo por? Algo como:

SELECT COUNT(*) FROM t1 GROUP BY keywork;

1
Quiere la cantidad de identificadores de producto distintos. Su consulta devuelve el número de filas para cada palabra clave.
David
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.