2017-07-31 16 views
1

ランキング列を追加するクエリがあります。私の既存のクエリは3つのテーブルをユニオンクエリとして持ち、その週の合計注文額の合計を持っています。このクエリは、WeekCommencingでグループ化されたその週の合計注文額の合計を生成しますが、その週の最も低い合計値に基づいてランキング列を追加するのに苦労しています。これまでのランク付けSUMの値の列を日付別にグループ化する

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; 

私の試みは、現在の週の順にランク付けし

私は(更新)SQLFiddle例はこちらhttp://sqlfiddle.com/#!9/f1d43/35

CREATEおよびINSERT文であります最高から最低までのランク付けではなく、開始します。

私の望ましい結果は

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

関連する問題