Task06:综合练习题-10道经典题目

这篇博客是阿里云天池龙珠计划SQL训练营的学习总结,包含了10道大数据与数据库实战题目,涉及数据合并、排名计算、优惠券分析、市场趋势等,旨在提升SQL查询和数据处理能力。
摘要由CSDN通过智能技术生成

本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql

练习题1:

数据来源:数据集-阿里云天池

请使用A股上市公司季度营收预测数据集《Income Statement.xls》和《Company Operating.xlsx》和《Market Data.xlsx》,以Market Data为主表,将三张表中的TICKER_SYMBOL为600383和600048的信息合并在一起。只需要显示以下字段。

表名字段名
Income StatementTICKER_SYMBOL
Income StatementEND_DATE
Income StatementT_REVENUE
Income StatementT_COGS
Income StatementN_INCOME
Market DataTICKER_SYMBOL
Market DataEND_DATE_
Market DataCLOSE_PRICE
Company OperatingTICKER_SYMBOL
Company OperatingINDIC_NAME_EN
Company OperatingEND_DATE
Company OperatingVALUE
SELECT MarketData.*,
     OperatingData.INDIC_NAME_EN,
     OperatingData.VALUE,
     IncomeStatement.N_INCOME,
     IncomeStatement.T_COGS,
     IncomeStatement.T_REVENUE
 FROM (
     SELECT TICKER_SYMBOL,
         END_DATE,
         CLOSE_PRICE
     FROM `market data`
   WHERE TICKER_SYMBOL IN ('600383','600048') ) MarketData
 LEFT JOIN -- operating data
     (SELECT TICKER_SYMBOL,
         INDIC_NAME_EN,
         END_DATE,
         VALUE
     FROM `company operating`
 WHERE TICKER_SYMBOL IN ('600383','600048') ) OperatingData
   ON MarketData.TICKER_SYMBOL = OperatingData.TICKER_SYMBOL
   AND MarketData.END_DATE = OperatingData.END_DATE
 LEFT JOIN -- income statement
     (SELECT DISTINCT TICKER_SYMBOL,
         END_DATE,
         T_REVENUE,
         T_COGS,
         N_INCOME
   FROM `income statement`
     WHERE TICKER_SYMBOL IN ('600383','600048') ) IncomeStatement
ON MarketData.TICKER_SYMBOL = IncomeStatement.TICKER_SYMBOL
 AND MarketData.END_DATE = IncomeStatement.END_DATE
ORDER BY MarketData.TICKER_SYMBOL, MarketData.END_DATE

练习题2:

数据来源:数据集-阿里云天池

请使用 Wine Quality Data 数据集《winequality-red.csv》,找出 pH=3.03的所有红葡萄酒,然后,对其 citric acid 进行中式排名(相同排名的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”)

SELECT pH,
     `citric acid`,
     DENSE_RANK() OVER (ORDER BY `citric acid`) AS rankn
  FROM shop.`winequality-red`
WHERE pH= 3.03;

 执行结果:

 

练习题3:

数据来源:天池新人实战赛o2o优惠券使用预测赛题与数据-天池大赛-阿里云天池

使用Coupon Usage Data for O2O中的数据集《ccf_offline_stage1_test_revised.csv》,试分别找出在2016年7月期间,发放优惠券总金额最多和发放优惠券张数最多的商家。

这里只考虑满减的金额,不考虑打几折的优惠券。

 发放优惠券总金额最多商家:


SELECT Merchant_id,
         SUM(SUBSTRING_INDEX(`Discount_rate`,':',-1)) AS discount_amount
 FROM shop.ccf_offline_stage1_test_revised
WHERE Date_received BETWEEN '2016-07-01' AND '2016-07-31'
GROUP BY Merchant_id
ORDER BY discount_amount DESC
LIMIT 1;

执行结果: 

发放优惠券张数最多的商家 :

SELECT Merchant_id,COUNT(1) AS cnt
FROM shop.ccf_offline_stage1_test_revised
WHERE Date_received BETWEEN '2016-07-01' AND '2016-07-31'
GROUP BY Merchant_id
ORDER BY cnt DESC
LIMIT 1;

 执行结果:

 

练习题4:

数据来源:数据集-阿里云天池

请使用A股上市公司季度营收预测中的数据集《Macro&Industry.xlsx》中的sheet-INDIC_DATA,请计算全社会用电量:第一产业:当月值在2015年用电最高峰是发生在哪月?并且相比去年同期增长/减少了多少个百分比?

-- 2015年⽤电最⾼峰是发⽣在哪⽉
SELECT PERIOD_DATE,
       MAX(DATA_VALUE) FianlValue
 FROM `macro industry`
WHERE INDIC_ID = '2020101522'
   AND YEAR(PERIOD_DATE) = 2015
GROUP BY PERIOD_DATE
ORDER BY FianlValue DESC
LIMIT 1;
 
-- 并且相⽐去年同期增⻓/减少了多少个百分⽐?
SELECT BaseData.*,
     (BaseData.FianlValue - YoY.FianlValue) / YoY.FianlValue YoY
 FROM (SELECT PERIOD_DATE,
         MAX(DATA_VALUE) FianlValue
     FROM `macro industry`
     WHERE INDIC_ID = '2020101522'
     AND YEAR(PERIOD_DATE) = 2015
     GROUP BY PERIOD_DATE
     ORDER BY FianlValue DESC
         LIMIT 1) BaseData
 LEFT JOIN -- YOY
     (SELECT PERIOD_DATE,
     MAX(DATA_VALUE) FianlValue
     FROM `macro industry`
     WHERE INDIC_ID = '2020101522'
     AND YEAR(PERIOD_DATE) = 2014
     GROUP BY PERIOD_DATE ) YoY
     ON YEAR(BaseData.PERIOD_DATE) = YEAR(YoY.PERIOD_DATE) + 1
     AND MONTH(BaseData.PERIOD_DATE) = MONTH(YoY.PERIOD_DATE);

练习题5:

数据来源:天池新人实战赛o2o优惠券使用预测赛题与数据-天池大赛-阿里云天池

使用Coupon Usage Data for O2O中的数据集《ccf_online_stage1_train.csv》,试统计在2016年6月期间,线上总体优惠券弃用率为多少?并找出优惠券弃用率最高的商家。

弃用率 = 被领券但未使用的优惠券张数 / 总的被领取优惠券张数


-- 2016年6⽉期间,线上总体优惠券弃⽤率为多少?
SELECT SUM(CASE WHEN Date='0000-00-00' AND Coupon_id IS NOT NULL
             THEN 1
             ELSE 0
         END) /
         SUM(CASE WHEN Coupon_id IS NOT NULL
             THEN 1
             ELSE 0
         END) AS discard_rate
FROM ccf_online_stage1_train
WHERE Date_received BETWEEN '2016-06-01' AND '2016-06-30';
-- 2016年6⽉期间,优惠券弃⽤率最⾼的商家?
SELECT Merchant_id,
     SUM(CASE WHEN Date = '0000-00-00' AND Coupon_id IS NOT NULL
             THEN 1
             ELSE 0
             END) /
     SUM(CASE WHEN Coupon_id IS NOT NULL
             THEN 1
             ELSE 0
             END) AS discard_rate
 FROM ccf_online_stage1_train
WHERE Date_received BETWEEN '2016-06-01' AND '2016-06-30'
GROUP BY Merchant_id
ORDER BY discard_rate DESC

练习题6:

数据来源:数据集-阿里云天池

请使用 Wine Quality Data 数据集《winequality-white.csv》,找出 pH=3.63的所有白葡萄酒,然后,对其 residual sugar 量进行英式排名(非连续的排名)

SELECT pH,
 `residual sugar`,
 RANK() OVER (ORDER BY `residual sugar`) AS rankn
 FROM shop.`winequality-white`
WHERE pH= 3.63;

执行结果: 

 

练习题7:

数据来源:数据集-阿里云天池

请使用A股上市公司季度营收预测中的数据集《Market Data.xlsx》中的sheet-DATA,

计算截止到2018年底,市值最大的三个行业是哪些?以及这三个行业里市值最大的三个公司是哪些?(每个行业找出前三大的公司,即一共要找出9个)

-- 计算截⽌到2018年底,市值最⼤的三个⾏业是哪些?
SELECT TYPE_NAME_CN,
     SUM(MARKET_VALUE)
 FROM `market data`
WHERE YEAR(END_DATE) = '2018-12-31'
GROUP BY TYPE_NAME_CN
ORDER BY SUM(MARKET_VALUE) DESC
LIMIT 3
 
-- 这三个⾏业⾥市值最⼤的三个公司是哪些?
SELECT BaseData.TYPE_NAME_CN,
     BaseData.TICKER_SYMBOL
 FROM (SELECT TYPE_NAME_CN,
     TICKER_SYMBOL,
     MARKET_VALUE,
 ROW_NUMBER() OVER(PARTITION BY TYPE_NAME_CN ORDER BY MARKET_VALUE)
CompanyRanking
     FROM `market data` ) BaseData
 LEFT JOIN
 ( SELECT TYPE_NAME_CN,
     SUM(MARKET_VALUE)
   FROM `market data`
     WHERE YEAR(END_DATE) = '2018-12-31'
     GROUP BY TYPE_NAME_CN
     ORDER BY SUM(MARKET_VALUE) DESC
     LIMIT 3 ) top3Type
 ON BaseData.TYPE_NAME_CN = top3Type.TYPE_NAME_CN
WHERE CompanyRanking <= 3
 AND top3Type.TYPE_NAME_CN IS NOT NULL

练习题8:

数据来源:天池新人实战赛o2o优惠券使用预测赛题与数据-天池大赛-阿里云天池

使用Coupon Usage Data for O2O中的数据集《ccf_online_stage1_train.csv》和《ccf_offline_stage1_train.csv》,试找出在2016年6月期间,线上线下累计优惠券使用次数最多的顾客。

SELECT User_id,
     SUM(couponCount) couponCount
 FROM (SELECT User_id,
         count(*) couponCount
     FROM shop.`ccf_online_stage1_train`
   WHERE (Date != 'null' AND Coupon_id != 'null')
         AND (LEFT(DATE,4)=2016 )
   GROUP BY User_id
       UNION ALL
 SELECT User_id,
         COUNT(*) couponCount
   FROM shop.`ccf_offline_stage1_train`
 WHERE (Date != 'null' AND Coupon_id != 'null')
     AND (LEFT(DATE,4)=2016 )
   GROUP BY User_id ) BaseData
GROUP BY User_id
ORDER BY SUM(couponCount) DESC
LIMIT 1;

练习题9:

数据来源:数据集-阿里云天池

请使用A股上市公司季度营收预测数据集《Income Statement.xls》中的sheet-General Business和《Company Operating.xlsx》中的sheet-EN。

找出在数据集所有年份中,按季度统计,白云机场旅客吞吐量最高的那一季度对应的净利润是多少?(注意,是单季度对应的净利润,非累计净利润。)


-- 因为正好是第⼀季度,所以不需要减。 如果是2季度,单季度净利润需要⽤2季度的值减去1⽉份的
SELECT *
 FROM (SELECT TICKER_SYMBOL,
     YEAR(END_DATE) Year,
     QUARTER(END_DATE) QUARTER,
     SUM(VALUE) Amount
   FROM `company operating`
  WHERE INDIC_NAME_EN = 'Baiyun Airport:Passenger throughput'
  GROUP BY TICKER_SYMBOL,YEAR(END_DATE),QUARTER(END_DATE)
  ORDER BY SUM(VALUE) DESC
  LIMIT 1 ) BaseData
 LEFT JOIN -- income statement
   (SELECT TICKER_SYMBOL,
     YEAR(END_DATE) Year,
     QUARTER(END_DATE) QUARTER,
     SUM(N_INCOME) Amount
  FROM `income statement`
 GROUP BY TICKER_SYMBOL,YEAR(END_DATE),QUARTER(END_DATE) ) Income
 ON BaseData.TICKER_SYMBOL = Income.TICKER_SYMBOL
AND BaseData.Year = Income.Year
 AND BaseData.QUARTER = Income.QUARTER

练习题10:

数据来源:天池新人实战赛o2o优惠券使用预测赛题与数据-天池大赛-阿里云天池

使用Coupon Usage Data for O2O中的数据集《ccf_online_stage1_train.csv》和《ccf_offline_stage1_train.csv》,试找出在2016年6月期间,线上线下累计被使用优惠券满减最多的前3名商家。

比如商家A,消费者A在其中使用了一张200减50的,消费者B使用了一张30减1的,那么商家A累计被使用优惠券满减51元。


SELECT Merchant_id,
     SUM(discount_amount) discount_amount
 FROM (SELECT Merchant_id,
         SUM(SUBSTRING_INDEX(`Discount_rate`,':',-1)) AS discount_amount
   FROM `ccf_online_stage1_train`
 WHERE (Date != 'null' AND Coupon_id != 'null')
   AND (LEFT(DATE,4)=2016 )
   AND MID(DATE,5,2) = '06'
 GROUP BY Merchant_id
     UNION ALL
 SELECT Merchant_id,
     SUM(SUBSTRING_INDEX(`Discount_rate`,':',-1)) AS discount_amount
     FROM `ccf_offline_stage1_train`
 WHERE (Date != 'null' AND Coupon_id != 'null')
   AND (LEFT(DATE,4)=2016 )
   AND MID(DATE,5,2) = '06'
  GROUP BY Merchant_id ) BaseData
GROUP BY Merchant_id
ORDER BY SUM(discount_amount) DESC

Executing tasks: [:app:assembleDebug] in project D:\Users\lenovo\AndroidStudioProjects\Pinduoduo WARNING: The specified Android SDK Build Tools version (27.0.0) is ignored, as it is below the minimum supported version (28.0.3) for Android Gradle Plugin 3.5.2. Android SDK Build Tools 28.0.3 will be used. To suppress this warning, remove "buildToolsVersion '27.0.0'" from your build.gradle file, as each version of the Android Gradle Plugin now has a default version of the build tools. > Task :app:preBuild UP-TO-DATE > Task :app:preDebugBuild UP-TO-DATE > Task :app:checkDebugManifest UP-TO-DATE > Task :app:generateDebugBuildConfig UP-TO-DATE > Task :app:javaPreCompileDebug UP-TO-DATE > Task :app:mainApkListPersistenceDebug UP-TO-DATE > Task :app:generateDebugResValues UP-TO-DATE > Task :app:createDebugCompatibleScreenManifests UP-TO-DATE > Task :app:mergeDebugShaders UP-TO-DATE > Task :app:compileDebugShaders UP-TO-DATE > Task :app:generateDebugAssets UP-TO-DATE > Task :app:compileDebugRenderscript NO-SOURCE > Task :app:compileDebugAidl NO-SOURCE > Task :app:generateDebugResources UP-TO-DATE > Task :app:mergeDebugResources UP-TO-DATE > Task :app:processDebugManifest > Task :app:processDebugResources FAILED AGPBI: {"kind":"error","text":"Android resource linking failed","sources":[{"file":"D:\\Users\\lenovo\\AndroidStudioProjects\\Pinduoduo\\app\\src\\main\\res\\layout\\activity_main.xml","position":{"startLine":34}}],"original":"D:\\Users\\lenovo\\AndroidStudioProjects\\Pinduoduo\\app\\src\\main\\res\\layout\\activity_main.xml:35: AAPT: error: '#875ale' is incompatible with attribute textColor (attr) reference|color.\n ","tool":"AAPT"} FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:processDebugResources'. > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade > Android resource linking failed D:\Users\lenovo\AndroidStudioProjects\Pinduoduo\app\src\main\res\layout\activity_main.xml:35: AAPT: error: '#875ale' is incompatible with attribute textColor (attr) reference|color. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 3s 11 actionable tasks: 2 executed, 9 up-to-date
06-07
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值