MySQL 连接来统计事务?

标签 mysql sql mysql-workbench

如果此内容之前/类似地发布过,我很抱歉,我不确定如何构建我的问题以找到正确的结果。

基本上,我有两张 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 个客户拥有我认为所有订单都归属于他们的订单。

这是我试图获得的输出示例:

/image/D6Bw0.png

最佳答案

您需要在此处按客户聚合,即使用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/

相关文章:

php - mysql数据库更新时间

java - hibernate 和jpa : table with composite primary key : auto increment problem

php - 如何避免在 php 中循环 sql 查询?

php - 使用PHP在网页中显示尚未出现在数据库记录列表中的结果

php - 如何将表ID传递给PHP中的另一个表

mysql - 将用户和特权转移到新服务器

sql - 在本地 SQL 服务器和 Azure SQL 服务器之间创建源?

mysql - SQLAlchemy 相交错误

mysql - 最后一列中包含 TEXT 数据类型的封闭文本可能有错误,出现 MySQL 错误 1064

MySQL创建外键时出现错误1064