使用 Between 的 CASE 语句

问题描述 投票:0回答:1

我正在玩“Lost at sql”游戏,特别是“挑战案例” 该题需要使用CASE语句来查找放“冒名顶替者”。 游戏给出了我有哪些桌子和哪些列的指导。

数据集具有以下列:

species_name(字符串):物种名称

common_name(字符串):物种的通用名称

长度(浮点数):物种的长度(以米为单位)

weight (float): 物种的重量,以千克为单位

habitat_type(字符串):该物种发现的栖息地类型(例如珊瑚礁、岩石海岸、海带森林)

您怀疑被带上船的生物可能已更改名称以避免被发现。- 不同鱼类的指导方针是: -小丑鱼长度在 3-7 英寸之间,重量在 0.2 到 0.8 磅之间,生活在珊瑚礁中。

章鱼(普通章鱼)长 12 至 36 英寸,重 6.6 至 23 磅。他们生活在沿海海域。

海星直径为 0.5 至 40 英寸,重量为 3.3 至 6.6 磅,您在海带森林中发现了它们。-

我正在使用 case 语句,其间为:

SELECT *,
CASE 
WHEN
common_name = "clownfish" 
    AND length between 3 AND 7 
    AND weight between 0.2 AND 0.8 
    AND habitat_type = "coral reef"
    THEN 'not impostor'
    ELSE 'impostor'
    END AS impostor_status
FROM marine_life 

它返回低于或高于给定数字的所有长度和重量,并且仅在“impostor_status”中给出“impostor” 我期望服务器在“impostor_status”列中返回给定范围之间的小丑鱼作为“非冒名顶替者”以及与“冒名顶替者”给出的数字不同的小丑鱼 相反,即使长度和重量超过或低于给定数字,它也会将所有结果作为“冒名顶替者”返回

sql case between
1个回答
0
投票

根据您的情况,这可能会帮助您正确分配冒名顶替者状态:

SELECT *,
  CASE
    WHEN common_name = 'clownfish'
      AND length BETWEEN 3 AND 7
      AND weight BETWEEN 0.2 AND 0.8
      AND habitat_type = 'coral reef'
      THEN 'not impostor'
    WHEN common_name = 'octopus' -- Assuming the common name for octopus is 'octopus'
      AND length BETWEEN 12 AND 36
      AND weight BETWEEN 6.6 AND 23
      AND habitat_type = 'coastal marine waters'
      THEN 'not impostor'
    WHEN common_name = 'starfish'
      AND length BETWEEN 0.5 AND 40
      AND weight BETWEEN 3.3 AND 6.6
      AND habitat_type = 'kelp forest'
      THEN 'not impostor'
    ELSE 'impostor'
  END AS impostor_status
FROM marine_life;

这根据指定的条件将每种动物的 WHEN 子句分开。这样,每个条件将被独立评估,CASE 语句将根据满足的条件分配适当的“impostor_status”。

© www.soinside.com 2019 - 2024. All rights reserved.