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

Haga clic en Upvote
fuente

Respuestas:

277

utilizar

SELECT COUNT(DISTINCT productId) from  table_name WHERE keyword='$keyword'
David
fuente
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.

Gratzy
fuente
31

Estabas cerca :-)

select count(distinct productId) from table_name where keyword='$keyword'
tekBlues
fuente
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'
Alistair Hart
fuente
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; 
George SEDRA
fuente
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

Rhalp Darren Cabrera
fuente
-5

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

SELECT COUNT(*) FROM t1 GROUP BY keywork;
Macarse
fuente
1
Quiere la cantidad de identificadores de producto distintos. Su consulta devuelve el número de filas para cada palabra clave.
David