データ
データベースのインポート
最初にデータベースをインポートします:
個別にインポートします:
次のように:
同じ方法で他のいくつかのデータテーブルをインポートします:
データを理解する
カテゴリ: cate ブランド: ブランド 売上: qtty 売上: amount ユーザー ID: pin 製品 ID: SKUID
- ピンテーブル: dt、skuid、pin の 3 つの特徴的な関係。つまり、時刻、ユーザー ID、アイテム ID です。
- sku テーブル: skuid、cate、およびブランド機能の関係。つまり、品番、カテゴリー、ブランドの関係です。
- 注文表: dt、skuid、sku_name、qtty、金額の特徴の関係。すなわち、時間、商品番号、商品名、売上、売上。
カテゴリは、ブランドの下のカテゴリです。Huaweiのラップトップなど。
必要とする
1. 単価が 0 のすべての製品は売上に含まれません2.
単価が 500 未満のノートブックは売上に含まれません
.
カテゴリの下のブランドの重複排除されたユーザーの数 (たとえば、ユーザー ID が 1 日で Xiaomi の 3 つの製品を閲覧した場合、このカテゴリの Xiaomi ブランドへの訪問者数が記録されます 1) 5、2019
年と 2018 年の売上は、1 位から156位の売上であり、前年比データ10 進
形式で表すことができます。2 桁のままにしてください。
アイデア
- 注文テーブルは、注文のブランドを取り出すために sku テーブルに関連付けられています
- 合計で19歳かどうかを判断するためにifを使用します
- 最初の 2 つはフィルタリングの場所で、名前を変更する場合は case が続き、最初はサブクエリでフィルタリングします。これは主にコード スタイルを調べます。
私のコード
SELECT
result2.*,
ROUND( result2.19年销量 / result2.18年销量, 2 ) AS 19年销量同比,
ROUND( result2.19年销额 / result2.18年销额, 2 ) AS 19年销额同比,
ROUND( result2.19年访客量 / result2.18年访客量, 2 ) AS 19年访客量同比
FROM
(
SELECT
result.cate 品类,
result.brand 品牌,
SUM(
CASE
WHEN YEAR ( result.order_dt ) = 2019
AND result.unit_price > 0
AND result.sku_name NOT LIKE '%补差价%'
AND DAY ( result.order_dt ) BETWEEN 1
AND 15
AND ( CASE WHEN result.cate = '笔记本' AND result.unit_price < 500 THEN NULL ELSE result.qtty END ) THEN
result.qtty ELSE NULL
END
) AS 19年销量,
SUM( CASE WHEN YEAR ( result.order_dt ) = 2019 AND result.sku_name NOT LIKE '%补差价%' THEN result.amount ELSE NULL END ) 19年销额,
COUNT( DISTINCT CASE WHEN YEAR ( result.pin_dt ) = 2019 AND result.sku_name NOT LIKE '%补差价%' THEN result.pin ELSE NULL END ) AS 19年访客量,
SUM(
CASE
WHEN YEAR ( result.order_dt ) = 2018
AND result.unit_price > 0
AND result.sku_name NOT LIKE '%补差价%'
AND DAY ( result.order_dt ) BETWEEN 1
AND 15
AND ( CASE WHEN result.cate = '笔记本' AND result.unit_price < 500 THEN NULL ELSE result.qtty END ) THEN
result.qtty ELSE NULL
END
) AS 18年销量,
SUM( CASE WHEN YEAR ( result.order_dt ) = 2018 AND result.sku_name NOT LIKE '%补差价%' THEN result.amount ELSE NULL END ) 18年销额,
COUNT( DISTINCT CASE WHEN YEAR ( result.pin_dt ) = 2018 AND result.sku_name NOT LIKE '%补差价%' THEN result.pin ELSE NULL END ) AS 18年访客量
FROM
(
SELECT
sku.cate,
CASE
WHEN `order`.sku_name LIKE '%荣耀%' THEN
'华为' ELSE sku.brand
END brand,
`order`.skuid,
`order`.qtty,
`order`.amount,
`order`.sku_name,
`order`.amount / `order`.qtty AS unit_price,
`order`.dt AS order_dt,
pin.pin,
pin.dt AS pin_dt
FROM
sku
JOIN `order` ON sku.skuid = `order`.skuid
JOIN pin ON sku.skuid = pin.skuid
) AS result
GROUP BY
result.cate,
result.brand
) AS result2;
結果: