【问题标题】:Ranking SUM of Value Column Grouped by Date按日期分组的值列的排名和
【发布时间】: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

先谢谢了

【问题讨论】:

    标签: mysql join sum union rank


    【解决方案1】:
    SELECT a.*
         , @i:=@i+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;
    

    【讨论】:

    • 太棒了。这正确显示了排名。是否可以通过 WeekCommencing 获得排名和顺序?
    • 只需将其包装在另一个超级查询中
    • 完美。现在已经排序了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2023-03-27
    • 1970-01-01
    • 2020-08-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多