Mysql 如何计算每个城市最大订单的顶级客户
我创建了表名Mysql 如何计算每个城市最大订单的顶级客户,mysql,Mysql,我创建了表名customersorders和orderdetails,如下所示 CREATE TABLE `customers` ( `customerNumber` int(11) NOT NULL, `customerName` varchar(50) NOT NULL, `contactLastName` varchar(50) NOT NULL, `contactFirstName` varchar(50) NOT NULL, `phone` varchar(50)
customers
orders
和orderdetails
,如下所示
CREATE TABLE `customers` (
`customerNumber` int(11) NOT NULL,
`customerName` varchar(50) NOT NULL,
`contactLastName` varchar(50) NOT NULL,
`contactFirstName` varchar(50) NOT NULL,
`phone` varchar(50) NOT NULL,
`addressLine1` varchar(50) NOT NULL,
`addressLine2` varchar(50) default NULL,
`city` varchar(50) NOT NULL,
`state` varchar(50) default NULL,
`postalCode` varchar(15) default NULL,
`country` varchar(50) NOT NULL,
`salesRepEmployeeNumber` int(11) default NULL,
`creditLimit` double default NULL,
PRIMARY KEY (`customerNumber`)
)
CREATE TABLE `orders` (
`orderNumber` int(11) NOT NULL,
`orderDate` datetime NOT NULL,
`requiredDate` datetime NOT NULL,
`shippedDate` datetime default NULL,
`status` varchar(15) NOT NULL,
`comments` text,
`customerNumber` int(11) NOT NULL,
PRIMARY KEY (`orderNumber`)
)
CREATE TABLE `orderdetails` (
`orderNumber` int(11) NOT NULL,
`productCode` varchar(15) NOT NULL,
`quantityOrdered` int(11) NOT NULL,
`priceEach` double NOT NULL,
`orderLineNumber` smallint(6) NOT NULL,
PRIMARY KEY (`orderNumber`,`productCode`)
)
之后,我必须找出每个城市中订单最多的客户。我已经计算了每个客户的总订单,如下所示,但我不知道如何从每个订单最多的城市中选择订单最多的客户。
所以问题是我怎样才能做到这一点
SELECT o.customerNumber, ROUND( SUM( od.priceEach * od.quantityOrdered ) , 2 ) AS totalOrder
FROM orders AS o
INNER JOIN orderDetails AS od ON o.orderNumber = od.orderNumber
GROUP BY o.customerNumber
ORDER BY totalOrder DESC
我正在使用mysql。试试这个:
Select tempTable.custNum, MAX(tempTable.totalOrder), customers.city
from
(
SELECT
o.customerNumber as custNum,
ROUND( SUM( od.priceEach * od.quantityOrdered ) , 2 ) AS totalOrder,
city
FROM orders AS o
INNER JOIN orderDetails AS od ON o.orderNumber = od.orderNumber
GROUP BY o.customerNumber
ORDER BY totalOrder DESC) as tempTable
inner join customers on (tempTable.custNum = customers.customerNumber)
group by tempTable.city
您可以按照建议执行此操作,但需要对该答案进行一些编辑
SELECT x.customerName, MAX( p.totalOrder ) , x.city
FROM (
SELECT o.customerNumber, ROUND( SUM( od.priceEach * od.quantityOrdered ) , 2 ) AS totalOrder
FROM orders AS o
INNER JOIN orderDetails AS od ON o.orderNumber = od.orderNumber
GROUP BY o.customerNumber
ORDER BY totalOrder DESC
)p
INNER JOIN customers x ON p.customerNumber = x.customerNumber
GROUP BY city
phpmyadmin说,
orders
和orderDetails
表上没有city
字段我想你可以与客户的表进行连接,请不要指望我们会提供端到端的解决方案,顺便说一句,已经更新了查询,现在检查我还听说了分区
。。。我们是否可以使用分区来解决这个问题。如果我们可以解决,那么对于大数据表,哪种方法在时间方面是有效的。。。
SELECT x.customerName, MAX( p.totalOrder ) , x.city
FROM (
SELECT o.customerNumber, ROUND( SUM( od.priceEach * od.quantityOrdered ) , 2 ) AS totalOrder
FROM orders AS o
INNER JOIN orderDetails AS od ON o.orderNumber = od.orderNumber
GROUP BY o.customerNumber
ORDER BY totalOrder DESC
)p
INNER JOIN customers x ON p.customerNumber = x.customerNumber
GROUP BY city