Usando DISTINCT e COUNT juntos em uma consulta MySQL

125

É algo como isto possível:

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

O que eu quero é obter o número de IDs de produtos exclusivos associados a uma palavra-chave. O mesmo produto pode estar associado duas vezes a uma palavra-chave ou mais, mas gostaria de contar apenas 1 vez por ID do produto

Click Voto a favor
fonte

Respostas:

277

usar

SELECT COUNT(DISTINCT productId) from  table_name WHERE keyword='$keyword'
David
fonte
A resposta foi atualizada, pois está perto de se tornar uma ótima resposta e estava sintaticamente incorreta.
Rahul Tripathi
Sou contra respostas que não oferecem desempenho ideal quando se trata de bancos de dados. É fundamental manter os padrões de desempenho. Eu iria com a resposta de @ alistair-hart.
JDuarteDJ
Tropecei enquanto procurava outra coisa e aprendia alguma coisa. Eu sempre fiz isso com SELECT COUNT(DISTINCT(productId)) from table_name WHERE keyword='$keyword'. Eu gosto mais da sua versão passando dois parâmetros para COUNT( ).
Rockin4Life33
Para minha surpresa, descobri que não pode haver um espaço entre "COUNT" e o parêntese de abertura - pelo menos na versão 10.1.41 do MariaDB.
DRosenfeld
61

Eu faria algo assim:

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

que lhe dará uma lista como

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

Isso permite que você veja quantos de cada ID de produto distinto estão associados à palavra-chave.

Gratzy
fonte
31

Você estava perto :-)

select count(distinct productId) from table_name where keyword='$keyword'
tekBlues
fonte
A resposta foi atualizada, pois está perto de se tornar uma boa resposta e estava sintaticamente incorreta.
Rahul Tripathi
19

Para sua informação, provavelmente é mais rápido,

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

que isso,

SELECT COUNT(DISTINCT productId) WHERE keyword='$keyword'
Alistair Hart
fonte
Não tenho certeza se é mais rápido, mas a maneira de contar várias colunas com palavra-chave distinta
VladL
Resposta fantástica. Sua resposta é pelo menos 100 vezes mais rápida no meu caso. Uma ligeira alteração para entender o código de @ Alistair éSELECT count(*) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp
KarthikS 20/17/17
6

Que diabos de todo esse trabalho anteras

é simples demais

se você quiser uma lista de quanto productId em cada palavra-chave, aqui está o código

SELECT count(productId),  keyword  FROM `Table_name` GROUP BY keyword; 
George SEDRA
fonte
Obrigado por esse comentário, não a resposta purista para sua pergunta exata, mas talvez o que ele está procurando e útil.
Leo
4

SELEÇÃO DE PRODUTO DISTINTO E CONTAGEM DE EXIBIÇÃO POR PRODUTO

para outra resposta sobre esse tipo de pergunta, esta é minha outra resposta para obter a contagem da base de produtos no nome do produto distinta como esta amostra abaixo:

Valor da tabela

select * FROM Product

Nome do produto contado

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

Contagem de registros: 4; Tempo de execução: 2ms

Rhalp Darren Cabrera
fonte
-5

Não é melhor com um grupo? Algo como:

SELECT COUNT(*) FROM t1 GROUP BY keywork;
Macarse
fonte
1
Ele quer o número de IDs de produtos distintos. Sua consulta retorna o número de linhas para cada palavra-chave.
David