如何在带有整数列的模式 SQL 中使用 case 语句并分配字符串值

问题描述

    with user_industries as (
  SELECT disTINCT company_id,industry,active_seats,revenue,seat_group,received_at FROM (
    SELECT
      nvl(u.clearbit_company_category_industry,u.company_industry) industry,u.received_at,u.company_id,u.active_seats,CASE 
        WHEN u.active_seats >= 1 AND u.active_seats <= 2 THEN 'group_1'
        WHEN u.active_seats >= 3 AND u.active_seats <= 5 THEN 'group_2'
        WHEN u.active_seats >= 6 AND u.active_seats <= 8 THEN 'group_3'
        WHEN u.active_seats >= 9 THEN 'group_4'
      ELSE u.active_seats 
      END seat_group,u.revenue,row_number() OVER (PARTITION BY u.company_id ORDER BY u.received_at DESC) rownum
    FROM web_application_production_PHP.users u
  ) where rownum = 1 and received_at >= '2019-07-01'

运行 Case 语句时,我想分配一个字符串值以在我的报告中使用,我该怎么做?

解决方法

来自我的同事:嗯,您将座椅组分配给一个字符串,除非它不属于一个组,然后您将它分配给一个整数。 SQL 不喜欢那样。 我建议给默认情况一个像'group_0'这样的值,而不是像你现在这样的 u.active_seats。

    SELECT DISTINCT company_id,industry,active_seats,revenue,seat_group,received_at FROM (
  SELECT
   nvl(u.clearbit_company_category_industry,u.company_industry) industry,u.received_at,u.company_id,u.active_seats,CASE 
    WHEN u.active_seats >= 1 AND u.active_seats <= 2 THEN 'group_1'
    WHEN u.active_seats >= 3 AND u.active_seats <= 5 THEN 'group_2'
    WHEN u.active_seats >= 6 AND u.active_seats <= 8 THEN 'group_3'
    WHEN u.active_seats >= 9 THEN 'group_4'
   ELSE 'group_0'
   END seat_group,u.revenue,row_number() OVER (PARTITION BY u.company_id ORDER BY u.received_at DESC) rownum
  FROM web_application_production_php.users u
 ) where rownum = 1 and received_at >= '2019-07-01'