【问题标题】:MySQL: Select records where COUNTMySQL:选择 COUNT 的记录
【发布时间】:2011-09-25 23:14:34
【问题描述】:

我正在尝试选择 1000 位正好下了 1 个订单的客户。一切都在订单表中。

Order 中选择 *,count(CustomerID) = 1 限制 1000

所以基本上所有在整个表中只出现一次 CustomerID 的记录。这将返回一个空结果集,并且表中有 100,000 个。

【问题讨论】:

  • 您是否在寻找不同的客户 ID?你想获得什么价值?

标签: mysql


【解决方案1】:

您需要GROUP 才能(有意义地)使用HAVING 子句。以下按预期工作:

SELECT
    *
FROM
    `Order`
GROUP BY
    CustomerID
HAVING
    COUNT(CustomerID) = 1
LIMIT 1000

更新
添加WHERE(见cmets):

SELECT
    *
FROM
    `Order`
WHERE
    Language = 'EN'
GROUP BY
    CustomerID
HAVING
    COUNT(CustomerID) = 1
LIMIT 1000

【讨论】:

  • 有效!但是,如果我添加 WHERE Language = "EN" 我会收到语法错误。你知道为什么吗?
  • @stef 你如何添加它? ... FROM `Order` WHERE ... GROUP BY ... 应该可以工作。查看更新的答案。
  • @stef 请注意WHERE 是作为查询的条件执行的(在聚合函数之前),而HAVING 是在之后执行的,因为它以聚合数据为目标(例如,COUNT())。
【解决方案2】:
SELECT * FROM `Order`
GROUP BY CustomerID 
HAVING COUNT(CustomerID) = 1 
LIMIT 1000

【讨论】:

    【解决方案3】:

    试试

    select count(CustomerID) as counter ,o.* from Order o
    group by CustomerID having  counter  = 1  limit 1000
    

    【讨论】:

      【解决方案4】:

      添加 group by 以查询正确的输出,例如:

      选择 * 从订单 按客户 ID 分组 计数(客户 ID)= 1 限制1000

      【讨论】:

        【解决方案5】:

        SELECT CustomerID FROM Order GROUP BY CustomerID HAVING COUNT(*) = 1 LIMIT 1000

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-09
          • 1970-01-01
          • 2012-01-04
          • 1970-01-01
          • 1970-01-01
          • 2020-09-15
          • 2011-06-14
          • 2016-04-03
          相关资源
          最近更新 更多