HY。我的postgresql数据库中有员工记录,如
CODE DATE COUNT
"3443" "2009-04-02" 3
"3444" "2009-04-06" 1
"3443" "2009-04-06" 1
"3443" "2009-04-07" 7
我想使用一个查询“选择所有代码并计算他们在本月发生的事情”
结果:
CODE DATE COUNT
"3443" "2009-04" 3
"3441" "2009-04" 13
"3442" "2009-04" 11
"3445" "2009-04" 72
我确实使用过查询,即
SELECT CODE,date_part('month',DATE),count(CODE)
FROM employee
where
group by CODE,DATE
上述查询运行正常,但记录中列出的月份是数字形式,很难找到一个月属于哪一年。简而言之,我想得到结果,如上面在RESULT部分中提到的那样。感谢
答案 0 :(得分:18)
试试这个:
SELECT CODE, to_char(DATE, 'YYYY-MM'), count(CODE)
FROM employee
where
group by CODE, to_char(DATE, 'YYYY-MM')
答案 1 :(得分:12)
根据您是希望将结果显示为文本还是日期,您也可以这样写:
SELECT CODE, date_trunc('month', DATE), COUNT(*)
FROM employee
GROUP BY CODE, date_trunc('month', DATE);
在你的例子中会返回这个,DATE仍然是一个时间戳,如果你要对它进行进一步的计算,这可能很有用,因为不需要转换:
CODE DATE COUNT
"3443" "2009-04-01" 3
"3441" "2009-04-01" 13
"3442" "2009-04-01" 11
"3445" "2009-04-01" 72
date_trunc()
也接受其他值,例如quarter
,year
等。
有关所有值,请参阅documentation
答案 2 :(得分:1)
尝试
中的任何一个SELECT CODE,count(CODE),
DATE as date_normal,
date_part('year', DATE) as year,
date_part('month', DATE) as month,
to_timestamp(
date_part('year', DATE)::text
|| date_part('month', DATE)::text, 'YYYYMM')
as date_month
FROM employee
where
group by CODE,DATE;