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

Réponses:


277

utilisation

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

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é.


31

Vous étiez proche :-)

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

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'

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; 

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


-5

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

SELECT COUNT(*) FROM t1 GROUP BY keywork;

1
Il veut le nombre d'identifiants de produits distincts. Votre requête renvoie le nombre de lignes pour chaque mot-clé.
David
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.