Utiliser DISTINCT et COUNT ensemble dans une requête MySQL

125

Est-ce que quelque chose comme ça est possible:

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

Ce que je veux, c'est obtenir le nombre d'identifiants de produit uniques associés à un mot-clé. Le même produit peut être associé deux fois à un mot-clé, ou plus, mais je souhaite qu'une seule fois soit comptée par ID de produit

Cliquez sur Upvote
la source

Réponses:

277

utilisation

SELECT COUNT(DISTINCT productId) from  table_name WHERE keyword='$keyword'
David
la source
Mise à jour de la réponse car elle est sur le point de devenir une excellente réponse et sa syntaxe était incorrecte.
Rahul Tripathi
Je suis contre les réponses qui n'offrent pas des performances optimales en matière de bases de données. Il est essentiel de respecter les normes de performance. J'irais avec la réponse de @ alistair-hart.
JDuarteDJ
Je suis tombé dessus en cherchant autre chose et j'ai appris quelque chose. J'ai toujours fait ça avec SELECT COUNT(DISTINCT(productId)) from table_name WHERE keyword='$keyword'. J'aime mieux votre version en passant deux paramètres COUNT( ).
Rockin4Life33
À ma grande surprise, j'ai trouvé qu'il ne pouvait pas y avoir d'espace entre "COUNT" et la parenthèse ouvrante - du moins dans la version 10.1.41 de MariaDB.
DRosenfeld le
61

Je ferais quelque chose comme ça:

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

cela vous donnera une liste comme

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

Cela vous permet de voir combien de chaque ID productid distinct est associé au mot-clé.

Gratzy
la source
31

Vous étiez proche :-)

select count(distinct productId) from table_name where keyword='$keyword'
tekBlues
la source
Mise à jour de la réponse car elle est sur le point de devenir une bonne réponse et sa syntaxe était incorrecte.
Rahul Tripathi
19

FYI, c'est probablement plus rapide,

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

que ça,

SELECT COUNT(DISTINCT productId) WHERE keyword='$keyword'
Alistair Hart
la source
Je ne sais pas si c'est plus rapide, mais la façon de compter plusieurs colonnes avec un mot
VladL
Réponse fantastique. Sa réponse est au moins 100 fois plus rapide dans mon cas. Une légère modification pour comprendre le code de @ Alistair estSELECT count(*) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp
KarthikS
6

Que diable de toutes ces anthères de travail

c'est trop simple

si vous voulez une liste de la quantité de productId dans chaque mot-clé, c'est le code

SELECT count(productId),  keyword  FROM `Table_name` GROUP BY keyword; 
George SEDRA
la source
Merci pour ce commentaire, pas la réponse puriste à sa question exacte, mais peut-être ce qu'il recherche, et de toute façon utile.
Leo
4

SÉLECTION DU PRODUIT DISTINCT ET DU NOMBRE D'AFFICHAGE PAR PRODUIT

pour une autre réponse sur ce type de question, voici ma autre réponse pour obtenir le nombre de produits de base sur le nom du produit distinct comme cet exemple ci-dessous:

Valeur de la table

select * FROM Product

Nom du produit compté

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

Nombre d'enregistrements: 4; Temps d'exécution: 2 ms

Rhalp Darren Cabrera
la source
-5

N'est-ce pas mieux avec un groupe par? Quelque chose comme:

SELECT COUNT(*) FROM t1 GROUP BY keywork;
Macarse
la source
1
Il veut le nombre d'identifiants de produits distincts. Votre requête renvoie le nombre de lignes pour chaque mot-clé.
David