可视化

看板系统/数据分析系统 是两个东西

CREATE TABLE "产品表" (
	"产品ID" TEXT NULL DEFAULT NULL,
	"类别" TEXT NULL DEFAULT NULL,
	"子类别" TEXT NULL DEFAULT NULL,
	"产品名称" TEXT NULL DEFAULT NULL,
	"id" INTEGER NOT NULL,
	PRIMARY KEY ("id")
)
;
CREATE TABLE "客户表" (
	"客户ID" TEXT NULL DEFAULT NULL,
	"客户名称" TEXT NULL DEFAULT NULL,
	"细分" TEXT NULL DEFAULT NULL,
	"城市" TEXT NULL DEFAULT NULL,
	"省" TEXT NULL DEFAULT NULL,
	"国家" TEXT NULL DEFAULT NULL,
	"地区" TEXT NULL DEFAULT NULL,
	"id" INTEGER NOT NULL,
	PRIMARY KEY ("id")
)
;
CREATE TABLE "订单表" (
	"id" INTEGER NOT NULL,
	"订单 ID" TEXT NULL DEFAULT NULL,
	"订单日期" TIMESTAMP NULL DEFAULT NULL,
	"发货日期" TIMESTAMP NULL DEFAULT NULL,
	"邮寄方式" TEXT NULL DEFAULT NULL,
	"客户 ID" TEXT NULL DEFAULT NULL,
	"产品 ID" TEXT NULL DEFAULT NULL,
	"销售额" DOUBLE PRECISION NULL DEFAULT NULL,
	"数量" BIGINT NULL DEFAULT NULL,
	"折扣" DOUBLE PRECISION NULL DEFAULT NULL,
	"利润" DOUBLE PRECISION NULL DEFAULT NULL,
	"pid" INTEGER NULL DEFAULT NULL,
	"cid" INTEGER NULL DEFAULT NULL,
	"oid" INTEGER NULL DEFAULT NULL,
	PRIMARY KEY ("id")
)
;

基于 Tableau超市数据分析

select  
订单表."id",
订单表."订单日期"  ,
	订单表."发货日期" ,
	订单表."邮寄方式"  ,
	订单表."销售额"  ,
	订单表."数量"  ,
	订单表."折扣"  ,
	订单表."利润" ,
	客户表."客户名称" ,
	客户表."细分"  ,
	客户表."城市"  ,
	客户表."省" ,
	客户表."国家"  ,
	客户表."地区"  ,
	产品表."类别" ,
	产品表."子类别"  ,
	产品表."产品名称"  ,
from 订单表
left join 产品表 on (订单表.pid =产品表.id )
left join 客户表 on (订单表.cid =客户表.id )

累计销售额

SELECT  EXTRACT(YEAR FROM 订单日期) AS year,
	ROUND( sum( 销售额 )) as 年累计销售额, ROUND( sum( 利润 )) as 年利润,
	ROUND( (sum( 利润 )/( sum( 销售额 ) - sum( 利润 )) * 100)::numeric ,2  )   as 利润率,
	count( distinct id ) as 订单数,
	ROUND( sum( 销售额 ) / count( distinct id )) as  客单价,
	round((sum( 销售额)/  sum(销售额/(1-折扣)  )*100 )::numeric,2) as 年折扣率
FROM public."超市数据"
group by year 
order by  year 

地区/类别/细分占比

SELECT   地区,
	ROUND( sum( 销售额 )) as 年累计销售额 
FROM public."超市数据"
group by 地区 
order by  年累计销售额 

SELECT   类别,
	ROUND( sum( 销售额 )) as 年累计销售额 
FROM public."超市数据"
group by 类别
order by  年累计销售额 

SELECT   细分,
	ROUND( sum( 销售额 )) as 年累计销售额 
FROM public."超市数据"
group by 细分
order by  年累计销售额 

同比销售

select t1.year as 年, (t1.年累计销售额/t2.年累计销售额-1)*100  同比
--, t1.年累计销售额 ,t2.年累计销售额 as 去年销售额
from 
(SELECT  EXTRACT(YEAR FROM 订单日期)   AS year,
	ROUND( sum( 销售额 )) as 年累计销售额 
FROM public."超市数据"
group by year ) t1
left join ( SELECT  EXTRACT(YEAR FROM 订单日期) + 1 AS 去年,
	ROUND( sum( 销售额 )) as 年累计销售额 
FROM public."超市数据"
group by 去年 
  ) as t2
on t1.year = t2.去年
  order by  t1.year 

月同比

select CONCAT(ta.年 ,'-', ta.月 ) as 时间
, ta.年累计销售额
, ROUND( ((ta.年累计销售额/tb.年累计销售额-1)*100)::numeric ) as 同比 
from 
(SELECT  EXTRACT(YEAR FROM 订单日期) AS 年, EXTRACT(month FROM 订单日期) AS 月,
	ROUND( sum( 销售额 )) as 年累计销售额 
FROM public."超市数据"
group by 年 ,月
) ta
left join 
(SELECT  EXTRACT(YEAR FROM 订单日期) + 1  AS 年, EXTRACT(month FROM 订单日期) AS 月,
	ROUND( sum( 销售额 )) as 年累计销售额 
FROM public."超市数据"
group by 年 ,月
) tb
on ( ta.年 = tb.年 and ta.月 = tb.月)

order by  ta.年,ta.月 

销售额组占比

select ta.*   
,round(ta.组内数量::NUMERIC/tb.组内数量*100  ) as 占比
from (SELECT  
EXTRACT(YEAR FROM 订单日期) AS 年,
 CASE 
        WHEN 销售额 <= 100 THEN '100'
        WHEN 销售额 <= 500 THEN '100-500'
        WHEN 销售额 <= 1000 THEN '500-1000'
        WHEN 销售额 <= 2000 THEN '1000-2000'
        ELSE '2000以上'
    END AS 范围组
	,count(销售额) 组内数量
	FROM public."超市数据"
group by 年 ,范围组) ta
left join  (SELECT  
	EXTRACT(YEAR FROM 订单日期) AS 年,
	count(销售额) 组内数量
	FROM public."超市数据"
	group by 年  
) tb
on ta.年  = tb.年 
order by  ta.年 ,范围组

均价

SELECT   CONCAT( EXTRACT(YEAR FROM 订单日期) ,'-', EXTRACT(month FROM 订单日期) ) as 时间
 ,EXTRACT(YEAR FROM 订单日期) AS 年
 , EXTRACT(month FROM 订单日期) AS 月 
 , round( avg(销售额)) as 销售均价
FROM public."超市数据"
group by 年 ,月
order by 年 ,月

地区环比

select ta.* ,ta.年累计销售额 
--, tb.去年累计销售额
, round( ((ta.年累计销售额 / tb.去年累计销售额-1)*100)::numeric ,2)
from (SELECT   
   EXTRACT(YEAR FROM 订单日期) AS 年
   ,地区
   ,ROUND( sum( 销售额 )) as 年累计销售额 
FROM public."超市数据"
group by 年,地区 
) ta
left join (SELECT   
   EXTRACT(YEAR FROM 订单日期) +1 AS 年
   ,地区
	,ROUND( sum( 销售额 )) as 去年累计销售额 
FROM public."超市数据"
group by 年,地区 
) tb
on (ta.年 = tb.年 and ta.地区 = tb.地区)
order by  ta.年,ta.年累计销售额 desc

类别top

大数据理念-嵌套

WITH 产品销售额 AS (
    SELECT
	EXTRACT(YEAR FROM 订单日期) AS 年,
        类别,
        子类别,
        产品名称,
        round(SUM(销售额) )AS 产品总销售额
    FROM public."超市数据"
    GROUP BY 年,类别, 子类别, 产品名称
),
排名数据 AS (
    SELECT *,
        ROW_NUMBER() OVER (
            PARTITION BY 年,类别  
            ORDER BY 产品总销售额 DESC
        ) AS 排名
    FROM 产品销售额
)
SELECT *
FROM 排名数据
WHERE 排名 <= 2
ORDER BY 年,类别, 产品总销售额 desc, 排名;

客单价

SELECT  
城市 , count(distinct 客户名称  ) 客户数
, round(sum(销售额)/count(distinct 客户名称  ) ) as 客单价
, round(avg(销售额)  ) as 均价
FROM public."超市数据" 
group by 城市
order by 客户数 desc

SELECT  EXTRACT(YEAR FROM 订单日期) AS year,
EXTRACT(MONTH FROM 订单日期) AS month 
FROM public."超市数据"
group by year,month
order by  year,month

COMMENT ON COLUMN "产品表"."产品 ID" IS '';
COMMENT ON COLUMN "产品表"."类别" IS '';
COMMENT ON COLUMN "产品表"."子类别" IS '';
COMMENT ON COLUMN "产品表"."产品名称" IS '';
COMMENT ON COLUMN "产品表"."id" IS '';
COMMENT ON COLUMN "客户表"."客户 ID" IS '';
COMMENT ON COLUMN "客户表"."客户名称" IS '';
COMMENT ON COLUMN "客户表"."细分" IS '';
COMMENT ON COLUMN "客户表"."城市" IS '';
COMMENT ON COLUMN "客户表"."省" IS '';
COMMENT ON COLUMN "客户表"."国家" IS '';
COMMENT ON COLUMN "客户表"."地区" IS '';
COMMENT ON COLUMN "客户表"."id" IS '';
COMMENT ON COLUMN "订单表"."id" IS '';
COMMENT ON COLUMN "订单表"."订单 ID" IS '';
COMMENT ON COLUMN "订单表"."订单日期" IS '';
COMMENT ON COLUMN "订单表"."发货日期" IS '';
COMMENT ON COLUMN "订单表"."邮寄方式" IS '';
COMMENT ON COLUMN "订单表"."客户 ID" IS '';
COMMENT ON COLUMN "订单表"."产品 ID" IS '';
COMMENT ON COLUMN "订单表"."销售额" IS '';
COMMENT ON COLUMN "订单表"."数量" IS '';
COMMENT ON COLUMN "订单表"."折扣" IS '';
COMMENT ON COLUMN "订单表"."利润" IS '';
COMMENT ON COLUMN "订单表"."pid" IS '';
COMMENT ON COLUMN "订单表"."cid" IS '';
COMMENT ON COLUMN "订单表"."oid" IS '';