【发布时间】:2021-04-08 13:19:27
【问题描述】:
我有一个关于一年中门票销售的大型数据集。我正在使用的架构是:
ID
date_time_sale (Timestamp, yyyy-MM-dd hh-mm-ss)
weekday (varchar, Mon to Sun)
number_tickets (integer)
ticket_price (float)
total_price (float)
我正在尝试获取一年中售出票数最多的每个月的工作日,因此,例如,输出将是:
| year | month | weekday | total_tickets |
|---|---|---|---|
| 2015 | 01 | SAT | 5400 |
| 2015 | 02 | SUN | 4300 |
| 2015 | 03 | SUN | 6400 |
我尝试使用以下方法,但不可否认 SQL 不是我最擅长的技能:
SELECT DISTINCT EXTRACT(YEAR FROM date_time_sale) AS YEAR,
EXTRACT(MONTH FROM date_time_sale) AS MONTH,
week_day,
RANK () OVER (PARTITION BY YEAR, MOMTH ORDER BY count(week_day) ASC) weekday_count
from ticket_sales
order by YEAR, MONTH
但我总是遇到错误。我尝试使用 HAVING 子句,但我哪儿也去不了。关于如何有效地使用 RANK () OVER (PARTITION BY) 子句来获得此输出的任何提示,好吗?还是我需要使用 COUNT () OVER?
分析异常说:
`cannot resolve '`YEAR`' given input columns: [ticket_sales.YEAR, ticket_sales.MONTH, weekday]; line 1 pos 292;\n'Sort ['YEAR ASC NULLS FIRST, 'MONTH ASC NULLS FIRST], true\n+- Project [YEAR#342, MONTH#358
但这是一个相当长的错误。
更新:
所以我尝试了这段代码:
SELECT DISTINCT year,
month,
week_day,
COUNT (week_day) OVER (PARTITION BY year, month, week_day) AS weekday_count
from ticket_sales
order by year, month, weekday_count DESC
这样做是给出每个月的所有工作日的结果,所以输出是 12*7 而不是 12 行。仍然可以学习解决这个问题,但至少我在某个地方。
【问题讨论】:
-
用您正在使用的数据库标记您的问题。
-
数据库是我的讲师对外提供的。
-
请edit您的任务并添加您遇到的错误
标签: sql group-by aggregate-functions having-clause