【发布时间】:2011-09-25 23:14:34
【问题描述】:
我正在尝试选择 1000 位正好下了 1 个订单的客户。一切都在订单表中。
从
Order中选择 *,count(CustomerID) = 1 限制 1000
所以基本上所有在整个表中只出现一次 CustomerID 的记录。这将返回一个空结果集,并且表中有 100,000 个。
【问题讨论】:
-
您是否在寻找不同的客户 ID?你想获得什么价值?
标签: mysql
我正在尝试选择 1000 位正好下了 1 个订单的客户。一切都在订单表中。
从
Order中选择 *,count(CustomerID) = 1 限制 1000
所以基本上所有在整个表中只出现一次 CustomerID 的记录。这将返回一个空结果集,并且表中有 100,000 个。
【问题讨论】:
标签: mysql
您需要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
【讨论】:
... FROM `Order` WHERE ... GROUP BY ... 应该可以工作。查看更新的答案。
WHERE 是作为查询的条件执行的(在聚合函数之前),而HAVING 是在之后执行的,因为它以聚合数据为目标(例如,COUNT())。
SELECT * FROM `Order`
GROUP BY CustomerID
HAVING COUNT(CustomerID) = 1
LIMIT 1000
【讨论】:
试试
select count(CustomerID) as counter ,o.* from Order o
group by CustomerID having counter = 1 limit 1000
【讨论】:
添加 group by 以查询正确的输出,例如:
选择 * 从订单 按客户 ID 分组 计数(客户 ID)= 1 限制1000
【讨论】:
SELECT CustomerID FROM Order GROUP BY CustomerID HAVING COUNT(*) = 1 LIMIT 1000
【讨论】: