Utilizzo di DISTINCT e COUNT insieme in una query MySQL


125

È possibile qualcosa di simile:

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

Quello che voglio è ottenere il numero di ID prodotto univoci associati a una parola chiave. Lo stesso prodotto può essere associato due volte a una parola chiave o più, ma vorrei che fosse conteggiata solo 1 volta per ID prodotto

Risposte:


277

uso

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

Aggiornata la risposta in quanto prossima a diventare un'ottima risposta ed era sintatticamente errata.
Rahul Tripathi

Sono contrario alle risposte che non offrono prestazioni ottimali quando si tratta di database. È fondamentale mantenere gli standard di performance. Vorrei andare con la risposta di @ alistair-hart.
JDuarteDJ

Ci siamo imbattuti in questo mentre cercavo qualcos'altro e ho imparato qualcosa. L'ho sempre fatto con SELECT COUNT(DISTINCT(productId)) from table_name WHERE keyword='$keyword'. Mi piace di più la tua versione passando due parametri a COUNT( ).
Rockin4Life33

Con mia sorpresa, ho scoperto che non può esserci uno spazio tra "COUNT" e la parentesi di apertura, almeno nella versione 10.1.41 di MariaDB.
DRosenfeld

61

Vorrei fare qualcosa di simile:

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

che ti darà una lista come

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

Ciò ti consente di vedere quanti ID prodotto distinti sono associati alla parola chiave.


31

Eri vicino :-)

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

Aggiornata la risposta in quanto prossima a diventare una buona risposta ed era sintatticamente errata.
Rahul Tripathi

19

Cordiali saluti, questo è probabilmente più veloce,

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

di questo,

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

Non sono sicuro che sia più veloce, ma il modo per contare più colonne con parole chiave distinte
VladL

Risposta fantastica. La sua risposta è almeno 100 volte più veloce nel mio caso. Una leggera alterazione per la comprensione del codice di @ Alistair èSELECT count(*) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp
KarthikS

6

Che diavolo di tutto questo lavoro antere

è troppo semplice

se vuoi un elenco di quanto productId in ogni parola chiave qui è il codice

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

Grazie per quel commento, non per la risposta purista alla sua domanda esatta, ma forse per quello che sta cercando, e comunque utile.
Leone

4

SELEZIONE DEL PRODOTTO DISTINTO E DEL CONTEGGIO DISPLAY PER PRODOTTO

per un'altra risposta su questo tipo di domanda, questa è un'altra risposta per ottenere il conteggio della base del prodotto sul nome del prodotto distinto come questo esempio di seguito:

Valore tabella

select * FROM Product

Nome prodotto contato

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

Conteggio record: 4; Tempo di esecuzione: 2 ms


-5

Non è meglio con un gruppo di? Qualcosa di simile a:

SELECT COUNT(*) FROM t1 GROUP BY keywork;

1
Vuole il numero di ID prodotto distinti. La tua query restituisce il numero di righe per ogni parola chiave.
David,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.