1. 程式人生 > 其它 >SQL基礎學習筆記<第三天>

SQL基礎學習筆記<第三天>

技術標籤:資料庫學習mysql

3.1 SQL時間

SELECT
	paidTime,
	date( paidTime ),
	date_format( paidtime, '%Y-%m-%d' ),
	DATE_ADD( paidtime, INTERVAL 1 DAY ) 
FROM
	test2.orderinfo

3.2 練習

1)統計不同月份的下單人數
SELECT MONTH
	( paidTime ) AS '月',
	count( DISTINCT userId ) AS '使用者數' 
FROM
	orderinfo 
WHERE
	ispaid = '已支付' 
GROUP
BY MONTH ( paidTime)

結果如下:

2)三月份復購率與回購率

復購率

SELECT
	count( ct ),
	count(
	IF
	( ct > 1, 1, NULL )) 
FROM
	( SELECT userid, count( userid ) AS ct FROM orderinfo WHERE isPaid = '已支付' AND MONTH ( paidTime ) = 3 GROUP BY userid ) d

回購率

SELECT
	t1.m,
	count( t1.m ),
	count( t2.m ) 
FROM
	(
	SELECT
userid, DATE_FORMAT( paidTime, "%Y-%m-01" ) m FROM orderinfo WHERE ispaid = '已支付' GROUP BY userId, DATE_FORMAT( paidTime, "%Y-%m-01" )) t1 LEFT JOIN ( SELECT userid, DATE_FORMAT( paidTime, "%Y-%m-01" ) m FROM orderinfo WHERE ispaid = '已支付' GROUP
BY userId, DATE_FORMAT( paidTime, "%Y-%m-01" )) t2 ON t1.userid = t2.userid AND t1.m = DATE_SUB( t2.m, INTERVAL 1 MONTH ) GROUP BY t1.m

結果如下:

3)統計男女使用者的消費頻次是否有差異
SELECT
	sex,
	avg( ct ) 
FROM
	(
	SELECT
		o.userid,
		sex,
		count( 1 ) AS ct 
	FROM
		orderinfo o
		JOIN ( SELECT * FROM `user.info` WHERE sex <> '' ) a ON o.userid = a.userid 
	WHERE
		isPaid = '已支付' 
	GROUP BY
		a.userid,
		sex 
	) t2 
GROUP BY
	sex

結果如下:

4)統計多次消費的使用者 ,第一次消費和最後一次消費間隔是多少?
SELECT
	userid,
	max( paidTime ),
	min( paidTime ),
	datediff(
		max( paidTime ),
	min( paidTime )) 
FROM
	orderinfo 
WHERE
	isPaid = '已支付' 
GROUP BY
	userid 
HAVING
	count( 1 ) > 1

結果如下:

5)統計不同年齡段,使用者的消費金額是否有差異
SELECT
	age,
	avg( ct ) 
FROM
	(
	SELECT
		o.userid,
		age,
		count( o.userId ) AS ct 
	FROM
		orderinfo o
		LEFT JOIN ( SELECT userid, CEIL(( YEAR ( now()) - YEAR ( birth ))/ 10 ) age FROM `user.info` WHERE birth > '1901-00-00' ) t ON o.userId = t.userid 
	WHERE
		ispaid = '已支付' 
	GROUP BY
		o.userid,
		age 
	) t2 
GROUP BY
	age

結果如下: