在MySQL查询中一起使用DISTINCT和COUNT


125

可能是这样的:

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

我想要获得与关键字相关联的唯一产品ID的数量。同一产品可能与某个关键字相关联两次,甚至更多,但我希望每个产品ID仅计一次

Answers:


277

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

更新了答案,因为它已接近成为一个很好的答案,并且在语法上是错误的。
Rahul Tripathi 2014年

我反对在数据库方面无法提供最佳性能的答案。保持性能标准至关重要。我会用@ alistair-hart的答案。
JDuarteDJ 2015年

在寻找其他东西并学到一些东西时偶然发现了这一点。我一直都使用SELECT COUNT(DISTINCT(productId)) from table_name WHERE keyword='$keyword'。我更喜欢您的版本将两个参数传递给COUNT( )
Rockin4Life33 '18年

令我惊讶的是,我发现“ COUNT”和左括号之间不能有空格-至少在MariaDB 10.1.41版中。
DRosenfeld

61

我会做这样的事情:

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

这会给你一个清单像

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

这样,您可以查看每个不同的产品ID与关键字相关联的数量。


31

你很近:-)

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

更新了答案,因为它已接近成为一个好的答案,并且在语法上是错误的。
Rahul Tripathi 2014年

19

仅供参考,这可能更快

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

比这个,

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

不知道它是否更快,但是可以用不同的关键字来计数多列的方法
VladL 2014年

很棒的答案。就我而言,他的回答至少快100倍。为了解SELECT count(*) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp
@Alistair

6

所有这些花药到底是怎么回事

这太简单了

如果您想要列出每个关键字中有多少productId,则为代码

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

感谢您的评论,不是纯粹回答他的确切问题,而是也许他正在寻找什么,并且仍然有用。
狮子座

4

选择不同的产品并按产品显示数量

对于这种类型问题的另一个答案,这是我根据产品名称区分产品数量的另一个答案,如下例所示:

表值

select * FROM Product

盘点产品名称

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

记录数:4;执行时间:2ms


-5

和一群人在一起好吗?就像是:

SELECT COUNT(*) FROM t1 GROUP BY keywork;

1
他想要不同的productID的数量。您的查询返回每个关键字的行数。
戴维2009年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.