LeetCode题解(1384):按年度列出销售总额(SQL)
发布日期:2021-06-29 20:12:03
浏览次数:2
分类:技术文章
本文共 2938 字,大约阅读时间需要 9 分钟。
题目:(困难)
标签:SQL
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
---|---|---|---|
Ans 1 (Python) | 450ms (5.06%) | ||
Ans 2 (Python) | |||
Ans 3 (Python) |
解法一:
SELECT T.product_id, P.product_name, T.report_year, T.total_amountFROM (SELECT product_id, '2018' AS report_year, CASE WHEN period_end < '2018-01-01' OR '2018-12-31' < period_start THEN 0 WHEN period_start < '2018-01-01' AND '2018-12-31' < period_end THEN 365 * average_daily_sales WHEN period_start < '2018-01-01' AND period_end < '2018-12-31' THEN (DATEDIFF(period_end, '2018-01-01') + 1) * average_daily_sales WHEN '2018-01-01' < period_start AND '2018-12-31' < period_end THEN (DATEDIFF('2018-12-31', period_start) + 1) * average_daily_sales WHEN '2018-01-01' < period_start AND period_end < '2018-12-31' THEN (DATEDIFF(period_end, period_start) + 1) * average_daily_sales END AS total_amount FROM Sales UNION ALL SELECT product_id, '2019' AS report_year, CASE WHEN period_end < '2019-01-01' OR '2019-12-31' < period_start THEN 0 WHEN period_start < '2019-01-01' AND '2019-12-31' < period_end THEN 365 * average_daily_sales WHEN period_start < '2019-01-01' AND period_end < '2019-12-31' THEN (DATEDIFF(period_end, '2019-01-01') + 1) * average_daily_sales WHEN '2019-01-01' < period_start AND '2019-12-31' < period_end THEN (DATEDIFF('2019-12-31', period_start) + 1) * average_daily_sales WHEN '2019-01-01' < period_start AND period_end < '2019-12-31' THEN (DATEDIFF(period_end, period_start) + 1) * average_daily_sales END AS total_amount FROM Sales UNION ALL SELECT product_id, '2020' AS report_year, CASE WHEN period_end < '2020-01-01' OR '2020-12-31' < period_start THEN 0 WHEN period_start < '2020-01-01' AND '2020-12-31' < period_end THEN 366 * average_daily_sales WHEN period_start < '2020-01-01' AND period_end < '2020-12-31' THEN (DATEDIFF(period_end, '2020-01-01') + 1) * average_daily_sales WHEN '2020-01-01' < period_start AND '2020-12-31' < period_end THEN (DATEDIFF('2019-12-31', period_start) + 1) * average_daily_sales WHEN '2020-01-01' < period_start AND period_end < '2020-12-31' THEN (DATEDIFF(period_end, period_start) + 1) * average_daily_sales END AS total_amount FROM Sales) AS T LEFT JOIN Product AS P ON P.product_id = T.product_idWHERE total_amount > 0ORDER BY product_id, report_year;
转载地址:https://dataartist.blog.csdn.net/article/details/110422366 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月17日 02时48分49秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
如何去除百度地图、高德地图api的logo和版本信息
2019-04-30
javascript 如何将字符串时间转换为毫秒数进行比较
2019-04-30
纯CSS实现分栏宽度拉伸调整
2019-04-30
Table表格的一些记录
2019-04-30
li相关整理:如何改变li前面点的颜色和如何去掉li的点
2019-04-30
ElementUI form表单 左侧label对齐注意事项
2019-04-30
高德地图开发自定义地图样式
2019-04-30
cron表达式整理--1
2019-04-30
vue学习笔记之vue深入响应式原理
2019-04-30
vue学习笔记之路由(Vue Router)安装
2019-04-30
vue学习笔记之路由起步实例
2019-04-30
vue学习笔记之动态路由匹配
2019-04-30
Vue学习笔记之嵌套路由
2019-04-30
Vue学习笔记之路由编程式的导航
2019-04-30
Vue学习笔记之命名路由
2019-04-30
Vue学习笔记之路由命名视图
2019-04-30
Vue学习笔记之路由的重定向和别名
2019-04-30
Vue学习笔记之路由组件传参
2019-04-30
Vue学习笔记之路由导航守卫
2019-04-30