【问题标题】:Using DISTINCT and COUNT together in a MySQL Query在 MySQL 查询中一起使用 DISTINCT 和 COUNT
【发布时间】:2009-06-16 15:46:06
【问题描述】:

这样的事情可能吗:

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

我想要的是获取与关键字相关联的唯一产品 ID 的数量。同一个产品可能与一个关键字关联两次,或者更多,但我希望每个产品 ID 只计算 1 次

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    使用

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

    【讨论】:

    • 更新了答案,因为它接近成为一个很好的答案,而且它在语法上不正确。
    • 我反对在数据库方面不能提供最佳性能的答案。保持性能标准至关重要。我会选择@alistair-hart 的回答。
    • 在寻找其他东西时偶然发现并学到了一些东西。我一直用SELECT COUNT(DISTINCT(productId)) from table_name WHERE keyword='$keyword' 来做这件事。我更喜欢你的版本,最好将两个参数传递给COUNT( )。
    • 令我惊讶的是,我发现“COUNT”和左括号之间不能有空格——至少在 MariaDB 10.1.41 版本中是这样。
    【解决方案2】:

    你很亲密:-)

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

    【讨论】:

    • 更新了答案,因为它接近成为一个好的答案,但语法不正确。
    【解决方案3】:

    我会这样做:

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

    这会给你一个像

    这样的列表
    count(*)    productid  
    ----------------------
     5           12345   
     3           93884   
     9           93493    
    

    这使您可以查看每个不同的 productid ID 中有多少与关键字相关联。

    【讨论】:

      【解决方案4】:

      仅供参考,这可能更快,

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

      比这个,

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

      【讨论】:

      • 不确定它是否更快,但是用不同的关键字计算多列的方法
      • 很棒的答案。就我而言,他的回答至少快了 100 倍。为了理解@Alistair 的代码,稍作改动是SELECT count(*) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp
      【解决方案5】:

      这到底是怎么回事花药

      太简单了

      如果您想要每个关键字中有多少 productId 的列表,这里是代码

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

      【讨论】:

      • 感谢您的评论,而不是对他确切问题的纯粹回答,但也许他正在寻找什么,并且无论如何有用。
      【解决方案6】:

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

      对于此类问题的另一个答案,这是我根据产品名称获取产品计数的另一个答案,如下面的示例:

      Table Value

      select * FROM Product
      

      Counted Product Name

      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

      【讨论】:

        【解决方案7】:

        分组不是更好吗? 比如:

        SELECT COUNT(*) FROM t1 GROUP BY keywork;
        

        【讨论】:

        • 他想要不同 productID 的数量。您的查询返回每个关键字的行数。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-23
        相关资源
        最近更新 更多