代码之家  ›  专栏  ›  技术社区  ›  KnowNothing

使用“END as”语句从动态生成的列名中选择不为null的字段

  •  1
  • KnowNothing  · 技术社区  · 7 年前

    假设我有这样一个SQL查询

         SELECT player_name,weight,
         CASE WHEN weight > 250 THEN 'over 250'
              WHEN weight > 200 THEN '201-250'
              WHEN weight > 175 THEN '176-200'
            ELSE '' END AS weight_group
       FROM benn.college_football_players
    

    我想在不干扰ELSE“”的情况下显示非null(Weight not null)的记录,因为这会导致查询中出现许多不必要的错误,是否有解决方法? 我用过

        where weight_group is not null 
    

    最后,但它会抛出一个错误作为“无效标识符”

    除了将整个select条件放在另一个select语句中之外,还有其他解决方法吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Yousaf    7 年前

    NULL 不相等 '' 在里面 MySQL . 无效的 方法 no data empty string 方法 空字符串 ,它们是两种不同的东西。

    您需要根据空字符串筛选数据,如

    where weight_group != '';
    

    现在,您可以通过多种方式实现所需的结果。

    1、使用子查询

    SELECT * 
    FROM (SELECT player_name,weight,
                 CASE 
                    WHEN weight > 250 THEN 'over 250' 
                    WHEN weight > 200 THEN '201-250' 
                    WHEN weight > 175 THEN '176-200' 
                    ELSE '' 
                END AS weight_group 
          FROM benn.college_football_players) AS t 
    WHERE weight_group != '';
    

    2、使用分组依据

    SELECT player_name,weight,
             CASE WHEN weight > 250 THEN 'over 250'
                  WHEN weight > 200 THEN '201-250'
                  WHEN weight > 175 THEN '176-200'
                  ELSE '' 
              END AS weight_group
    FROM benn.college_football_players
    GROUP BY weight_group, weight, player_name
    HAVING weight_group != '';
    
        2
  •  0
  •   Sabash    7 年前

    您可以添加where条件 其中重量>;175

    SELECT player_name,weight,
     CASE WHEN weight > 250 THEN 'over 250'
          WHEN weight > 200 THEN '201-250'
          WHEN weight > 175 THEN '176-200'
        ELSE '' END AS weight_group FROM benn.college_football_players where weight > 175
    

    这里其他部分不归还任何东西。也可以使用以下代码

    SELECT player_name,weight,
     CASE WHEN weight > 250 THEN 'over 250'
          WHEN weight > 200 THEN '201-250'
          WHEN weight > 175 THEN '176-200'
    END AS weight_group FROM benn.college_football_players where weight > 175