簡體   English   中英

如何按范圍划分列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM