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

标签 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;

这确实会返回回答上述问题的客户+他们拥有的订单数...但是在浏览数据库时,我发现还有其他客户未通过查询获取。我究竟做错了什么? 谢谢!

最佳答案

这个怎么样:

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_rep129。我们使用 IIF(对于较旧的 SQL Server 版本,您可以使用 CASE WHEN)来检查特定记录是否适用于特定的 sales_repMAX 检查至少一个这样的记录。

<小时/>

如果您不想使用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/

相关文章:

PHP-PDO-Mysql : Can't execute two requests in the same page

sql-server - 检查列是否为 NULL 或在表中包含 NULL。 - 微软 SQL 服务器

mysql - 选择一行及其周围的行

c# - SQL Server 中的数据类型二进制(1632)和 MYSQL 中的数据类型二进制(255)之间的区别?

php - 左连接 - 返回许多结果

php - 无法从表中检索图像数据并显示图像

php - 如何使用 PHP 从 MySQL 数据库中插入和检索数组值?

MySQL 在定义表的位置后抛出错误

sql - 如何在 MS Access 2007 或 MS SQL Server 2005 中通过 SQL 将字段转换为行

sql - 当不需要第二个表中的数据时,JOIN 的效率是否比 EXISTS IN 更高/更低?