【发布时间】:2017-07-31 11:27:30
【问题描述】:
我有一个查询,我想添加一个排名列。我现有的查询将三个表作为联合查询,其中包含该周总订单值的总和。此查询生成该周的总订单价值的总和,按 WeekCommencing 分组,但是我正在努力添加一个基于该周最高到最低总价值的排名列。
我的(更新的)SQLFiddle 示例在这里http://sqlfiddle.com/#!9/f1d43/35
CREATE 和 INSERT 语句:
CREATE TABLE IF NOT EXISTS ORD (
WeekCommencing DATE,
Value DECIMAL(20 , 6 ),
Orders INT(6)
);
CREATE TABLE IF NOT EXISTS REF (
WeekCommencing DATE,
Value DECIMAL(20 , 6 ),
Orders INT(6)
);
CREATE TABLE IF NOT EXISTS SOH (
WeekCommencing DATE,
Value DECIMAL(20 , 6 ),
Orders INT(6)
);
INSERT INTO ORD (WeekCommencing, Value, Orders) VALUES
('2017-07-24',1,1),
('2017-07-31',2,1),
('2017-07-17',3,1);
INSERT INTO REF (WeekCommencing, Value, Orders) VALUES
('2017-07-24',4,1),
('2017-07-17',5,1),
('2017-07-31',6,1);
INSERT INTO SOH (WeekCommencing, Value, Orders) VALUES
('2017-07-17',7,1),
('2017-07-24',8,1),
('2017-07-31',9,1);
我迄今为止的最大努力:
SELECT
WeekCommencing,
SUM(Value) AS 'TotalValue',
SUM(Orders) AS 'Orders',
@r:=@r+1 As 'Rank'
FROM
(SELECT
WeekCommencing, Value, Orders
FROM
ORD
GROUP BY WeekCommencing UNION ALL SELECT
WeekCommencing, Value, Orders
FROM
REF
GROUP BY WeekCommencing UNION ALL SELECT
WeekCommencing, Value, Orders
FROM
SOH
GROUP BY WeekCommencing) t1,
(SELECT @r:=0) Rank
GROUP BY WeekCommencing DESC;
我的尝试目前是按开始的一周顺序排列的,而不是从高到低排列。
我想要的结果是
WeekCommencing TotalValue Orders Rank
2017-07-31 17 3 1
2017-07-24 13 3 3
2017-07-17 15 3 2
先谢谢了
【问题讨论】: