Sử dụng DISTINCT và COUNT cùng nhau trong Truy vấn MySQL


124

Có phải bất cư thứ gì như thế này đều được:

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

Điều tôi muốn là có được số lượng Id sản phẩm duy nhất được liên kết với một từ khóa. Cùng một sản phẩm có thể được liên kết hai lần với một từ khóa hoặc nhiều hơn, nhưng tôi chỉ muốn 1 lần được tính cho mỗi ID sản phẩm

Câu trả lời:


276

sử dụng

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

Cập nhật câu trả lời vì nó gần trở thành một câu trả lời tuyệt vời và nó không đúng về mặt cú pháp.
Rahul Tripathi

Tôi chống lại câu trả lời không cung cấp hiệu suất tối ưu khi nói đến cơ sở dữ liệu. Điều quan trọng là phải giữ tiêu chuẩn nước hoa. Tôi sẽ đi với câu trả lời của @ alistair-hart.
JDuarteDJ

Tình cờ gặp điều này trong khi tìm kiếm thứ khác và học được điều gì đó. Tôi đã luôn luôn làm điều này với SELECT COUNT(DISTINCT(productId)) from table_name WHERE keyword='$keyword'. Tôi thích phiên bản của bạn tốt hơn thông qua hai thông số COUNT( ).
Rockin4Life33

Thật ngạc nhiên, tôi thấy rằng không thể có khoảng cách giữa "COUNT" và dấu ngoặc đơn mở - ít nhất là trong phiên bản 10.1.41 của MariaDB.
DRosenfeld

61

Tôi sẽ làm một cái gì đó như thế này:

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

nó sẽ cung cấp cho bạn một danh sách như

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

Điều này cho phép bạn xem có bao nhiêu ID sản phẩm riêng biệt được liên kết với từ khóa.


31

Bạn đã gần :-)

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

Cập nhật câu trả lời vì nó gần trở thành một câu trả lời hay và nó không đúng về mặt cú pháp.
Rahul Tripathi

19

FYI, điều này có thể nhanh hơn,

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

hơn cái này,

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

Không chắc là nó có nhanh hơn không, nhưng cách tính nhiều cột với từ khóa riêng biệt
VladL

Câu trả lời tuyệt vời. Câu trả lời của anh ấy nhanh hơn ít nhất 100 lần trong trường hợp của tôi. Một thay đổi nhỏ để hiểu mã của @ Alistair làSELECT count(*) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp
KarthikS 20/03/2017

6

Cái quái gì của bao phấn này

nó quá đơn giản

nếu bạn muốn có một danh sách bao nhiêu sản phẩm trong mỗi từ khóa ở đây thì đó là mã

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

Cảm ơn vì nhận xét đó, không phải câu trả lời thuần túy cho câu hỏi chính xác của anh ta, nhưng có lẽ những gì anh ta đang tìm kiếm, và dù sao cũng hữu ích.
Leo

4

CHỌN SẢN PHẨM DISTINCT VÀ HIỂN THỊ QUẬN M PERI SẢN PHẨM

đối với câu trả lời khác về loại câu hỏi này, đây là câu trả lời khác của tôi để có được số lượng sản phẩm dựa trên tên sản phẩm khác biệt như mẫu dưới đây:

Giá trị bảng

select * FROM Product

Tên sản phẩm đã đếm

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

Số lượng hồ sơ: 4; Thời gian thực hiện: 2ms


-5

Không phải là tốt hơn với một nhóm bởi? Cái gì đó như:

SELECT COUNT(*) FROM t1 GROUP BY keywork;

1
Anh ta muốn số lượng sản phẩm riêng biệt. Truy vấn của bạn trả về số lượng hàng cho mỗi từ khóa.
David
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.