如果此内容之前/类似地发布过,我很抱歉,我不确定如何构建我的问题以找到正确的结果。
基本上,我有两张 table 。 客户
和订单
。我正在尝试从客户表 customerName
中提取客户名称以及每个客户的订单数量。订单表对于每个下达的订单都有唯一的订单 ID,因此我的想法是对属于每个单独客户的每个订单进行计数。本质上,我希望查询输出 2 列:客户名称
和订单数
。然后,我只想显示订单数大于或等于 5 的客户。
这些是我正在使用的表。
CREATE TABLE Customers (
customerNumber INTEGER NOT NULL,
customerName VARCHAR(50) NOT NULL,
salesRepEmployeeNumber INTEGER NULL,
PRIMARY KEY (customerNumber),
FOREIGN KEY (salesrepEmployeeNumber) references Employees(employeeNumber)
)ENGINE=innodb;
CREATE TABLE Orders (
orderNumber int(11) NOT NULL,
orderDate DATETIME NOT NULL,
customerNumber INTEGER NOT NULL,
PRIMARY KEY (orderNumber),
FOREIGN KEY (customerNumber) references Customers(customerNumber)
)ENGINE=innodb;
我尝试的查询是:
SELECT
c.customerName as 'Customer Name',
count(o.orderNumber) as 'Number of Orders Made',
FROM Customers c
INNER JOIN Orders o;
ON c.customerNumber = o.customerNumber
HAVING count(o.orderNumber) > '4';
但是,这仅显示 1 个客户拥有我认为所有订单都归属于他们的订单。
这是我试图获得的输出示例:
最佳答案
您需要在此处按客户聚合,即使用GROUP BY
:
SELECT
c.customerName,
COUNT(o.orderNumber) AS num_orders
FROM Customers c
INNER JOIN Orders o
ON c.customerNumber = o.customerNumber
GROUP BY
c.customerNumber
HAVING
COUNT(*) >= 5;
这里需要注意的是,我们通过 customerNumber
列进行聚合,因为该值对于每个客户来说都是唯一的(customerName
可能在各个客户之间重复)。但是,我们可以自由选择 customerName
,因为它在功能上是由 customerNumber
确定的。
关于MySQL 连接来统计事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48971030/