我正在尝试按几列进行分组,包括月份和年份的提取列。 sql按原始日期列保持返回组。如何将日期提取到月份和年份,然后对此列进行分组。下面是我的完整SQL:
select Name,
extract(month from fill_Date) as Month,
extract(year from fill_Date) as Year,
sum(quantity)
from Table A
group by Name,fill_Date
答案 0 :(得分:0)
您可以在group-by子句中重复extract()
次调用:
select Name,
extract(month from fill_Date) as Month,
extract(year from fill_Date) as Year,
sum(quantity)
from TableA
group by Name,
extract(month from fill_Date),
extract(year from fill_Date)
或者使用子查询(内联视图)或CTE来提取值,然后使用列别名进行分组 - 您不能在与其定义的查询级别相同的位置引用列别名,但子查询意味着它不是同一级别:
select Name,
Month,
Year,
sum(quantity)
from (
select Name,
extract(month from fill_Date) as Month,
extract(year from fill_Date) as Year,
quantity
from TableA
)
group by Name,
Month,
Year
您不必单独提取年份和月份,但您当然可能需要。如果您的目标只是按年/月组合进行分组,则可以使用trunc()
功能使其忽略列值的日期和任何时间,并将其分组:
select Name,
to_char(trunc(fill_Date, 'MM'), 'MM YYYY') as month,
sum(quantity)
from TableA
group by Name,
trunc(fill_Date, 'MM')
trunc(fill_Date, 'MM')
会在一月的第一天给你午夜。在选择列表中使用to_char()
格式化仅显示月份和年份,但现在在单个列中,并且作为字符串而不是两个数字。您可以在分组中使用to_char()
但不需要。{/ p>