sql如何正确使用HAVING选择结果

时间:2017-05-10 08:08:34

标签: mysql sql sql-server group-by having

我有以下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;

确实会回复那些回答上述内容的客户+他们拥有的订单数量......但在浏览数据库时,我发现还有其他客户端未被查询提取。我究竟做错了什么? 谢谢!

1 个答案:

答案 0 :(得分:0)

这个怎么样:

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(您可以使用CASE WHEN用于较早的SQL Server版本)来检查特定记录是针对特定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的用户。