Menggunakan DISTINCT dan COUNT bersamaan dalam Kueri MySQL

125

Apakah sesuatu seperti ini mungkin:

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

Yang saya inginkan adalah mendapatkan jumlah ID produk unik yang terkait dengan kata kunci. Produk yang sama dapat dikaitkan dua kali dengan kata kunci, atau lebih, tetapi saya hanya ingin dihitung 1 kali per ID produk

Klik Suka
sumber

Jawaban:

277

menggunakan

SELECT COUNT(DISTINCT productId) from  table_name WHERE keyword='$keyword'
David
sumber
Memperbarui jawaban karena hampir menjadi jawaban yang bagus dan secara sintaksis salah.
Rahul Tripathi
Saya menentang jawaban yang tidak menawarkan kinerja optimal dalam hal database. Sangat penting untuk menjaga standar kinerja. Saya akan memilih jawaban @ alistair-hart.
JDuarteDJ
Tersandung ini saat mencari sesuatu yang lain dan mempelajari sesuatu. Saya selalu melakukan ini dengan SELECT COUNT(DISTINCT(productId)) from table_name WHERE keyword='$keyword'. Saya suka versi Anda lebih baik melewati dua parameter COUNT( ).
Rockin4Life33
Yang mengejutkan saya, saya menemukan bahwa tidak boleh ada spasi antara "JUMLAH" dan kurung buka - setidaknya di versi 10.1.41 dari MariaDB.
DRosenfeld
61

Saya akan melakukan sesuatu seperti ini:

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

yang akan memberi Anda daftar suka

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

Ini memungkinkan Anda untuk melihat berapa banyak dari setiap ID produk berbeda yang dikaitkan dengan kata kunci.

Gratzy
sumber
31

Anda sudah dekat :-)

select count(distinct productId) from table_name where keyword='$keyword'
tekBlues
sumber
Memperbarui jawaban karena hampir menjadi jawaban yang bagus dan secara sintaksis salah.
Rahul Tripathi
19

FYI, ini mungkin lebih cepat,

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

dari ini,

SELECT COUNT(DISTINCT productId) WHERE keyword='$keyword'
Alistair Hart
sumber
Tidak yakin apakah itu lebih cepat, tetapi cara menghitung beberapa kolom dengan kata kunci yang berbeda
VladL
Jawaban yang fantastis. Jawabannya setidaknya 100 kali lebih cepat dalam kasus saya. Sedikit perubahan untuk memahami kode @ Alistair adalahSELECT count(*) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp
KarthikS
6

Apa sih dari semua kepala sari pekerjaan ini

itu terlalu sederhana

jika Anda ingin daftar berapa banyak productId di setiap kata kunci di sini itu kodenya

SELECT count(productId),  keyword  FROM `Table_name` GROUP BY keyword; 
George SEDRA
sumber
Terima kasih atas komentar itu, bukan jawaban yang murni untuk pertanyaan tepatnya, tapi mungkin apa yang dia cari, dan bagaimanapun juga berguna.
Leo
4

MEMILIH PRODUK BERBEDA DAN COUNT TAMPILAN PER PRODUK

untuk jawaban lain tentang jenis pertanyaan ini adalah jawaban saya yang lain untuk menghitung basis produk berdasarkan nama produk yang berbeda seperti contoh di bawah ini:

Nilai Tabel

select * FROM Product

Nama Produk Terhitung

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

Hitungan Rekaman: 4; Waktu Eksekusi: 2ms

Rhalp Darren Cabrera
sumber
-5

Bukankah lebih baik dengan grup? Sesuatu seperti:

SELECT COUNT(*) FROM t1 GROUP BY keywork;
Macarse
sumber
1
Dia menginginkan jumlah productID yang berbeda. Kueri Anda mengembalikan jumlah baris untuk setiap kata kunci.
David