DISTINCT ve COUNT'u bir MySQL Sorgusunda birlikte kullanma


125

Bunun gibi bir şey mümkün mü:

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

İstediğim şey, bir anahtar kelimeyle ilişkilendirilmiş benzersiz ürün kimliklerinin sayısını elde etmektir. Aynı ürün bir anahtar kelimeyle iki kez veya daha fazla ilişkilendirilebilir, ancak ürün kimliği başına yalnızca 1 kez sayılmasını istiyorum

Yanıtlar:


277

kullanım

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

Yanıt, harika bir yanıt olmaya yakın olduğu ve sözdizimsel olarak yanlış olduğu için güncellendi.
Rahul Tripathi

Veritabanları söz konusu olduğunda optimum performans sunmayan yanıtlara karşıyım. Performans standartlarını korumak çok önemlidir. @ Alistair-hart'ın cevabıyla giderdim.
JDuarteDJ

Başka bir şey ararken buna rastladı ve bir şey öğrendi. Bunu hep birlikte yaptım SELECT COUNT(DISTINCT(productId)) from table_name WHERE keyword='$keyword'. Sürümünüzü iki parametrenin geçmesini daha çok seviyorum COUNT( ).
Rockin4Life33

Şaşırtıcı bir şekilde, "COUNT" ile açılış parantezi arasında boşluk olamayacağını buldum - en azından MariaDB'nin 10.1.41 sürümünde.
DRosenfeld

61

Bunun gibi bir şey yapardım:

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

bu sana şöyle bir liste verecek

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

Bu, her bir farklı ürün kimliği kimliğinden kaçının anahtar kelimeyle ilişkilendirildiğini görmenize olanak tanır.


31

Yakındınız :-)

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

Cevap, iyi bir cevap olmaya yakın olduğu ve sözdizimsel olarak yanlış olduğu için güncellendi.
Rahul Tripathi

19

Bilginize, bu muhtemelen daha hızlıdır,

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

Bundan daha,

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

Daha hızlı olup olmadığından emin değilim, ancak farklı anahtar kelimeyle birden çok sütunu
saymanın

Harika cevap. Benim durumumda cevabı en az 100 kat daha hızlı. Anlamak için küçük bir değişiklik @ Alistair'in koduSELECT count(*) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp
KarthikS

6

Bütün bu işler ne halt ediyor

çok basit

Her bir anahtar kelimede ne kadar productId'nin bir listesini istiyorsanız, bu koddur

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

Bu yorum için teşekkürler, tam olarak sorduğu sorunun saf cevabı değil, ama belki de aradığı şey ve yine de yararlı.
Aslan

4

FARKLI ÜRÜN SEÇME VE ÜRÜN BAŞINA EKRAN SAYISI

Bu türden bir soru hakkında başka bir cevap için bu, aşağıdaki örnekte olduğu gibi farklı ürün adı bazında ürün bazının sayısını almak için başka bir cevabım:

Tablo Değeri

select * FROM Product

Sayılan Ürün Adı

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

Kayıt Sayısı: 4; Yürütme Süresi: 2ms


-5

Bir grupla daha iyi değil mi? Gibi bir şey:

SELECT COUNT(*) FROM t1 GROUP BY keywork;

1
Farklı productID'lerin sayısını istiyor. Sorgunuz, her anahtar kelime için satır sayısını döndürür.
David
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.