2017-07-31 70 views
1

我有一个查询,我想添加一个排名列。我现有的查询有三个表作为联合查询,其中有一周的总订单价值。此查询会生成按WeekCommencing分组的总订单价值总和,但我很难根据该周的最高到最低总值添加排名列。按日期排列的值列的排名SUM

我(更新)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:[email protected]+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 

谢谢你是进步

回答

0
SELECT a.* 
    , @i:[email protected]+1 rank 
    FROM 
    (SELECT weekcommencing 
      , SUM(value) totalvalue 
      , COUNT(*) totalorders 
     FROM 
      (SELECT weekcommencing, value, orders FROM ord 
       UNION ALL 
       SELECT weekcommencing, value, orders FROM ref 
       UNION ALL 
       SELECT weekcommencing, value, orders FROM soh 
      ) x 
     GROUP 
      BY weekcommencing 
    ) a 
    , (SELECT @i:=0) vars 
ORDER 
    BY totalvalue DESC; 
+0

大。这显示正确的排名。是否可以通过WeekCommencing获得排名和订单? – Walkertron

+0

只是把它包裹在另一个超级查询 – Strawberry

+0

完美。现在已经排序了。 – Walkertron