我有以下 2 个表格(此处仅显示列的总和):
CUSTOMER:id, fname, lname.
SALES_ORDER: id, cust_id, sales_rep.
来自 CUSTOMER 的 id 与来自 SALES_ORDER 的 cust_id 连接。 我需要做的是:返回客户详细信息 + 该客户下的订单数量,对于至少有一个由员工编号“129”处理过的订单的客户。这是我尝试过的查询:
SELECT customer.id, fname, lname, count(*)
FROM customer,
sales_order
WHERE customer.id = sales_order.cust_id
GROUP BY customer.id
HAVING sales_rep = 129;
这确实会返回回答上述问题的客户+他们拥有的订单数...但是在浏览数据库时,我发现还有其他客户未通过查询获取。我究竟做错了什么? 谢谢!
最佳答案
这个怎么样:
SELECT customer.id, fname, lname, count(*)
FROM customer,
sales_order
WHERE customer.id = sales_order.cust_id
GROUP BY customer.id
HAVING MAX(IIF(sales_rep = 129, 1, 0)) = 1;
其想法是计算计数,但仅显示这些记录,其中至少有一个 sales_rep
为 129
。我们使用 IIF
(对于较旧的 SQL Server 版本,您可以使用 CASE WHEN
)来检查特定记录是否适用于特定的 sales_rep
和 MAX
检查至少一个这样的记录。
如果您不想使用HAVING
,您可以使用其他过滤条件来过滤行:
SELECT customer.id, fname, lname, count(*)
FROM customer
INNER JOIN sales_order
ON customer.id = sales_order.cust_id
WHERE customer.id IN
(
SELECT DISTINCT customer.id
FROM sales_order
WHERE sales_rep = 129
)
GROUP BY customer.id
其想法是计算每个客户的计数,然后使用 WHERE
子句仅显示您至少拥有一个 sales_rep = 129
的用户。
关于mysql - sql 如何正确使用 HAVING 选择结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43886859/