[英]how do I divide columns by range?
我需要你的幫助來使用 case when 函數。 (大概)
我有每天訪問服務器的數據。 但是,我想按訪問頻率對這些用戶數據進行分組。 這樣我就可以把他們分成訪問少於5次、5到10次和超過10次的組。 我聽說函數可以幫助解決這個問題,但我不知道如何運行它。
下面列出的是我用來導出每日訪問量的查詢,下表是查詢的輸出。 如果有人知道如何相應地編寫該查詢,請幫助我。 非常感激。
select aid, count(result_type) as "daily_visits"
FROM [DBO].[TB_SESSION_LOG]
WHERE
log_dt >= @start_date and
log_dt < @end_date
group by svc_cd, aid
order by svc_cd, aid
嘗試case
和子查詢或CTE :
select aid, count(result_type) as "daily_visits",
case
when count(result_type) < 5 then 0
when count(result_type) between 5 and 10 then 1
when count(result_type) > 10 then 2
end as grp
FROM [DBO].[TB_SESSION_LOG]
WHERE
log_dt >= @start_date and
log_dt < @end_date
group by svc_cd, aid
order by svc_cd, aid
請注意,我沒有測試上述查詢,但它應該可以工作或可能需要一些小的修復。
您可以使用CASE
分配一個分組,如下所示:
SELECT aid, COUNT(result_type) as daily_visits,
(CASE WHEN COUNT(result_type) < 5 THEN 'less than 5'
WHEN COUNT(result_type) < 10 THEN 'between 5 and 10'
ELSE '10 or more
END) as grp
FROM [DBO].[TB_SESSION_LOG]
WHERE log_dt >= @start_date and
log_dt < @end_date
GROUP BY aid
我不確定您是否需要額外的處理,但這似乎解決了您的問題。
注意:這將從查詢中刪除svc_cd
。 它似乎沒有被使用。
看來你正在尋找這樣的東西
with dv_cte(aid, daily_visits) as (
select aid, count(result_type)
from [DBO].[TB_SESSION_LOG]
where log_dt >= @start_date and
log_dt < @end_date
group by svc_cd, aid)
select
case when daily_visits < 5 then '<5'
when daily_visits < 10 then '>5 and <10'
else '10+' end as grp,
count(*) grp_count
from dv_cte
group by
case when daily_visits < 5 then '<5'
when daily_visits < 10 then '>5 and <10'
else '10+' end;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.