MySQL多個條件以什麼表當做主條件表_20161111周五

來源:互聯網
上載者:User

標籤:code   篩選   過程   包含   活動   需求   記錄   lin   並且   

前兩天有事情 停了2天

資料需求:
1、活動日期11.8-11.10訂單
2、單筆訂單購買A類產品 B類產品滿足68元、且連續3天下單的使用者ID

首先第一個條件很簡單,主要是第二個條件 第二個條件是 且 邏輯運算

並且計算每個欄位維度也不一樣,單筆訂單購買A、B 滿足68 這個情況包含一個使用者一天下多個訂單 這個是一個使用者多條記錄的情況 我稱之為多對一

第二個條件 連續3天下單的使用者ID 這個是一對一的記錄 一行一條記錄 是一個使用者對應這三天的下單天數總計 我稱之為一對一

第一種呈現方式:我想呈現的是這樣的一個表包含下面一個欄位

一個使用者,下單天數,三天每一天的金額(符合單筆訂單AB和>=68,因此需要一個最細的明細 一個訂單具體到每個產品去的原始明細 這樣看起來比較清晰 這個展現的過程是把單筆訂單滿足條件的使用者先篩選出來 然後再去判斷他的下單天數

a3表having 已經對使用者ID 進行了單筆訂單滿足條件的控制 然後下面就是計算下單天數 因為一天可能會出現多個訂單 所以需要再進行一次對使用者 和 訂單日期的Group by 

最後計算count(訂單日期)  天數 按照天數降序 以group by 使用者 結束  把使用者中符合單筆條件的下單天數計算出來 再去判斷就可以把使用者找出來

這樣表的結果也是一對一 一個使用者一行記錄

SELECT 城市,使用者ID,使用者名稱稱,SUM(金額) AS 3天總金額,COUNT(訂單日期) AS 下單天數,SUM(IF(訂單日期=‘2016-11-08‘,AB金額和,NULL)) AS 8日AB金額和,SUM(IF(訂單日期=‘2016-11-09‘,AB金額和,NULL)) AS 9日AB金額和,SUM(IF(訂單日期=‘2016-11-10‘,AB金額和,NULL)) AS 10日AB金額和FROM (    SELECT 城市,使用者ID,使用者名稱稱,訂單日期,SUM(金額) AS 金額,SUM(AB金額和) AS AB金額和,SUM(A金額) AS A金額,SUM(B金額) AS B金額    FROM (        SELECT 城市,使用者ID,使用者名稱稱,訂單日期,訂單ID,SUM(金額) AS 金額,(SUM(IF(產品分類="A",金額,0))+SUM(IF(產品分類="B",金額,0))) AS AB金額和,SUM(IF(產品分類="A",金額,NULL)) AS A金額    ,SUM(IF(產品分類="B",金額,NULL)) AS B金額        FROM(            SELECT 城市,使用者ID,使用者名稱稱,DATE(訂單日期) AS 訂單日期,`訂單ID`,a1.`產品ID`,a1.`產品名稱`,`產品分類`,`金額`            FROM `a003_order` AS a1            LEFT JOIN `a002_sku` AS a2 ON a1.產品ID=a2.產品ID            WHERE 城市=‘濟南‘ AND 訂單日期>="2016-11-08" AND 訂單日期<"2016-11-11" AND 金額>0         ) AS a3        GROUP BY 訂單ID        HAVING (SUM(IF(產品分類="A",金額,0))+SUM(IF(產品分類="B",金額,0)))>=68        ORDER BY 使用者ID    ) AS a    GROUP BY 使用者ID,訂單日期) AS bGROUP BY 使用者IDORDER BY COUNT(訂單日期) DESC 

第二種呈現方式:我先把所有使用者在這3天中的匯總情況計算出來,一個使用者一行記錄,下單天數,下定單總數,3天A的總額,B的總額,AB總額和,這個是主表

最後再去判斷這些使用者 哪些是單筆訂單滿足68的的使用者 當做從表 left join 主表 以使用者相同為條件 

這兩個表都是一對一的表 都從使用者為角度出發 

SELECT a.*,b.標識FROM (#以使用者ID匯總 一對一 3天內所有下單的使用者    SELECT 城市,使用者ID,COUNT(訂單日期) AS 下單天數,SUM(訂單數) AS 訂單數,SUM(AB金額和) AS AB金額和,SUM(A金額) AS A金額,SUM(B金額) AS B金額    FROM (        SELECT 城市,使用者ID,訂單日期,COUNT(訂單ID) AS 訂單數,SUM(AB金額和) AS AB金額和,SUM(A金額) AS A金額,SUM(B金額) AS B金額        FROM (            SELECT 城市,使用者ID,DATE(訂單日期) AS 訂單日期,訂單ID,SUM(金額) AS 訂單總額            ,(SUM(IF(a2.產品分類="A",金額,0))+SUM(IF(a2.產品分類="B",金額,0))) AS AB金額和            ,SUM(IF(a2.產品分類="A",金額,NULL)) AS A金額            ,SUM(IF(a2.產品分類="B",金額,NULL)) AS B金額            FROM `a003_order` AS a1            LEFT JOIN `a002_產品` AS a2 ON a1.產品ID=a2.產品ID            WHERE 城市=‘濟南‘ AND 訂單日期>="2016-11-08" AND 訂單日期<"2016-11-11" AND 金額>0 AND 使用者ID=44825            GROUP BY 訂單ID        ) AS a3        GROUP BY 使用者ID,訂單日期    ) AS a4    GROUP BY 使用者ID) AS aLEFT JOIN (#取出AB和單筆訂單>=68的使用者訂單 一對一    SELECT b3.*    FROM (#訂單ID明細 一個使用者對應多個訂單ID 一對多        SELECT 城市,使用者ID,DATE(訂單日期) AS 訂單日期,訂單ID,SUM(金額) AS 訂單總額        ,(SUM(IF(b2.產品分類="A",金額,0))+SUM(IF(b2.產品分類="B",金額,0))) AS AB金額和        ,SUM(IF(b2.產品分類="A",金額,NULL)) AS A金額        ,SUM(IF(b2.產品分類="B",金額,NULL)) AS B金額        ,CASE WHEN (SUM(IF(b2.產品分類="A",金額,0))+SUM(IF(b2.產品分類="B",金額,0)))>=68 THEN "3天內有單筆訂單>=68" ELSE NULL END AS 標識        FROM `a003_order` AS b1        LEFT JOIN `a002_產品` AS b2 ON b1.產品ID=b2.產品ID        WHERE 城市=‘濟南‘ AND 訂單日期>="2016-11-08" AND 訂單日期<"2016-11-11" AND 金額>0 AND 使用者ID=44825        GROUP BY 訂單ID        ORDER BY (SUM(IF(b2.產品分類="A",金額,0))+SUM(IF(b2.產品分類="B",金額,0))) DESC    ) AS b3    WHERE 標識 IS NOT NULL    GROUP BY 使用者ID) AS b ON a.使用者ID=b.使用者ID

 

MySQL多個條件以什麼表當做主條件表_20161111周五

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.