Używanie razem DISTINCT i COUNT w zapytaniu MySQL

125

Czy coś takiego jest możliwe:

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

Chcę uzyskać liczbę unikalnych identyfikatorów produktów, które są powiązane ze słowem kluczowym. Ten sam produkt może być dwukrotnie powiązany ze słowem kluczowym lub więcej, ale chciałbym, aby tylko 1 raz był liczony dla każdego identyfikatora produktu

Kliknij opcję Głos za
źródło

Odpowiedzi:

277

posługiwać się

SELECT COUNT(DISTINCT productId) from  table_name WHERE keyword='$keyword'
David
źródło
Zaktualizowano odpowiedź, ponieważ jest ona bliska uzyskania świetnej odpowiedzi i była niepoprawna pod względem składniowym.
Rahul Tripathi,
Jestem przeciwko odpowiedziom, które nie oferują optymalnej wydajności, jeśli chodzi o bazy danych. Zachowanie standardów wydajności jest niezwykle ważne. Poszedłbym z odpowiedzią @ alistair-hart.
JDuarteDJ
Natknąłem się na to, szukając czegoś innego i czegoś się nauczyłem. Zawsze to robiłem SELECT COUNT(DISTINCT(productId)) from table_name WHERE keyword='$keyword'. Podoba mi się twoja wersja, która przekazuje dwa parametry COUNT( ).
Rockin4Life33
Ku mojemu zdziwieniu stwierdziłem, że między „COUNT” a nawiasem otwierającym nie może być spacji - przynajmniej w wersji 10.1.41 MariaDB.
DRosenfeld
61

Zrobiłbym coś takiego:

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

to da ci listę jak

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

Pozwala to zobaczyć, ile różnych identyfikatorów identyfikatorów produktu jest powiązanych ze słowem kluczowym.

Gratzy
źródło
31

Byłeś blisko :-)

select count(distinct productId) from table_name where keyword='$keyword'
tekBlues
źródło
Zaktualizowano odpowiedź, ponieważ jest ona bliska uzyskania dobrej odpowiedzi i była niepoprawna pod względem składniowym.
Rahul Tripathi,
19

FYI, to prawdopodobnie szybsze,

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

od tego,

SELECT COUNT(DISTINCT productId) WHERE keyword='$keyword'
Alistair Hart
źródło
Nie jestem pewien, czy jest szybszy, ale sposób na policzenie wielu kolumn za pomocą odrębnego słowa kluczowego
VladL
Fantastyczna odpowiedź. W moim przypadku jego odpowiedź jest co najmniej 100 razy szybsza. Niewielka zmiana dla zrozumienia kodu @ Alistair toSELECT count(*) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp
KarthikS
6

Co do cholery z tego całego pylników

to jest zbyt proste

jeśli chcesz wyświetlić listę, ile productId w każdym słowie kluczowym, jest to kod

SELECT count(productId),  keyword  FROM `Table_name` GROUP BY keyword; 
George SEDRA
źródło
Dzięki za ten komentarz, a nie purystyczną odpowiedź na jego dokładne pytanie, ale może to, czego szuka, a poza tym przydatne.
Leo
4

WYBÓR WYRÓŻNIONEGO PRODUKTU I LICZBA WYŚWIETLANYCH PRODUKTÓW

aby uzyskać inną odpowiedź dotyczącą tego typu pytania, to jest moja kolejna odpowiedź, aby uzyskać liczbę produktów na podstawie nazwy produktu odrębnej, jak w poniższym przykładzie:

Wartość tabeli

select * FROM Product

Zliczona nazwa produktu

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

Liczba rekordów: 4; Czas wykonania: 2 ms

Rhalp Darren Cabrera
źródło
-5

Czy nie jest lepiej z grupą przez? Coś jak:

SELECT COUNT(*) FROM t1 GROUP BY keywork;
Macarse
źródło
1
Chce mieć liczbę różnych identyfikatorów produktów. Twoje zapytanie zwraca liczbę wierszy dla każdego słowa kluczowego.
David