統計各個年齡階段的人數和性別
select
ageGroup as '年齡段'
, cont(*) as '人數'
, sex as '性別'
from
(
select
case
when age >=1
and age<=10
then '1-10'
when age >=11
and age<=20
then '11-20'
when age >=21
and age<=30
then '21-30'
when age >=31
and age<=40
then '31-40'
else 'other'
end as ageGroup
, uname
, sex
from
table
)
t
group by
ageGroup
, sex
統計各個年齡人數占百分比
SELECT
USER_AGE 年齡
, COUNT(USER_AGE) 人數
, CAST(CAST((COUNT(USER_AGE)/(
(
SELECT
COUNT(*)
FROM
WORKER
)
*1.0)*100) AS DECIMAL(9,2)) AS VARCHAR)+'%' 所占比例
FROM
WORKER
GROUP BY
USER_AGE
postgresql統計
- 統計每小時的數量
思路: 格式化時間保留到小時,然后使用concat拼接00分00秒
SELECT
COUNT(id) cnt
, CONCAT(to_char(create_time,'yyyy-mm-dd hh24'),':00:00') H
FROM
table a
GROUP BY
CONCAT(to_char(create_time,'yyyy-mm-dd hh24'),':00:00')
ORDER BY
H
- 每隔5秒統計一次
比如01秒、04秒統一標識為00秒,05、06、09秒統一標識為05秒
思路: 截取秒最后一位和5進行比較
SELECT
tmp.newTime
, tmp.name
, COUNT(1) totalNum
FROM
(
SELECT
t.id
, t.name
, t.create_time oldTime
, -- 原來的時間
CASE
WHEN SUBSTR(to_char(t.create_time,'yyyy-mm-dd hh24:mi:ss'),19,1)::integer <5
THEN CONCAT(SUBSTR(to_char(t.create_time,'YYYY-mm-dd hh24:mi:ss'),0,19),'0')
ELSE CONCAT(SUBSTR(to_char(t.create_time,'yyyy-mm-dd hh24:mi:ss'),0,19),'5')
END AS newTime -- 時間段偽列
FROM
table t
ORDER BY
create_time ASC
)
tmp
GROUP BY
tmp.newTime
, tmp.name