标签: case-when

在使用MySQL的select查询中使用CASE,WHEN,THEN,END

我正在打一个棒球相关的网站.我有一个桌子,有两个棒球队的击球阵容:

+----+----------+--------------+--------+
| id | playerId | battingOrder | active |
+----+----------+--------------+--------+
Run Code Online (Sandbox Code Playgroud)

击球顺序是1到20之间的整数.这对应于以下逻辑:

  1. 击球顺序1-9 - 客队阵容
  2. 击球顺序10 - 客队投手
  3. 击球顺序11-19 - 主队阵容
  4. 击球令20 - 主队投手

活动字段是一个tinyint 0或1,表示土墩上的投手和盘子上的击球手.

已知事实:一支球队总会有一名主动投手,另一支球队将有一名主动投手.

我需要编写一个查询,为主队球员返回一个对应于battingOrder中下一个击球手的行.(在活动击球手的击球发生的那个)

例:

  1. 如果battingOrder 13中的玩家处于活动状态,则查询应该以击球顺序14返回玩家.
  2. 如果battingOrder 19中的玩家处于活动状态,则查询应该以击球顺序11返回玩家(阵容循环回到团队的第一个玩家).

我之前从未使用过CASE查询,但我想出了以下内容:

SELECT *
  FROM lineups
 WHERE battingOrder = 
       CASE (
           SELECT battingOrder
             FROM lineups
            WHERE battingOrder > 10 AND active = 1
            LIMIT 1
       )
       WHEN 11 THEN 12
       WHEN 12 THEN 13
       WHEN 13 THEN 14
       WHEN 14 THEN 15 …
Run Code Online (Sandbox Code Playgroud)

mysql select subquery case-when

5
推荐指数
1
解决办法
4万
查看次数

Oracle 案例

我有以下代码:

case when (a.je_source='Revaluation') then 'No_Location' 
    when d.user_name like ('SCHE%') then 'No_Location' 
    when d.user_name like ('C-FA%') then 'No_Location' 
    when d.user_name like ('C-AGO%') then 'No_Location'
    when d.user_name like ('C-VD%') then 'No_Location'
    when d.user_name like ('C-JL%') then 'No_Location'
    else d.user_name  
end as JE_User
Run Code Online (Sandbox Code Playgroud)

有没有办法让它更干净?我尝试了以下操作,但收到了缺少右括号的错误。

case when (a.je_source='Revaluation') then 'No_Location'
    when d.user_name like ('SCHE%', 'C-FA%') then 'No_Location' 
    else d.user_name 
end as JE_User
Run Code Online (Sandbox Code Playgroud)

oracle case-when

5
推荐指数
1
解决办法
5万
查看次数

sqlzoo上"从世界中选择"教程的第13部分有什么解决方案?

问题的语句是:

把大陆说得对...

  • 大洋洲成为澳大拉西亚
  • 欧亚大陆和土耳其的国家去欧洲/亚洲
  • 以'B'开头的加勒比群岛前往北美洲,其他加勒比岛屿则前往南美洲

显示所有国家的名称,原始大陆和新大陆.

我的解决方案

SELECT name, continent,
   CASE WHEN continent='Oceania' THEN 'Australasia'
        WHEN continent IN ('Europe', 'Asia') THEN 'Europe/Asia'
        WHEN name='Turkey' THEN 'Europe/Asia'
        WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America'
        WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America'
        ELSE continent END
FROM world
Run Code Online (Sandbox Code Playgroud)

我从sqlzoo得到的结果是"错误答案.有些数据不正确."

sql case case-when sql-like

5
推荐指数
1
解决办法
7495
查看次数

选择比较两列的案例

如果记录的某个其他值为true,我想要一个使用两个值/列中较大值的查询.

我正在尝试获取报告帐户.不幸的是,DB通常将Cash的值存储在一个名为的列中HoldingQty,而对于其他每种类型的持有(股票,债券,共同基金),它将其存储在一个名为的列中Qty.

问题在于,有时候现金的价值Qty只存储在,而有时则存在于QtyHoldingQty.显然有时候它只是HoldingQty如上所述存储.

基本上我希望我的选择陈述说"如果证券是现金,看看数量和持有数量,并给我更大的价值.否则,如果证券不是现金只是给我数量".

我如何在T-SQL中编写它?这是我的努力:

SELECT 
    h.account_name, h.security_name, h.security_type, h.price,
    (CASE:
         WHEN security_type = 'cash' 
            THEN (WHEN h.qty > h.holdingqty 
                     THEN h.qty 
                  ELSE h.holdingqty)
         ELSE qty) as quantity, 
     h.total_value
FROM 
    holdings h
WHERE
    ...........
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server select case-when

5
推荐指数
1
解决办法
2万
查看次数

如何在R中用一个case_when表达式改变两列?

根据一列中的文本,我想为另外两列分配一个字符和一个整数。用于将字符分配给一列和整数分配给另一列的多个 case_when 条件 (LHS) 相等,只有结果 (RHS) 不同。我正在使用exprsand!!!因为我只想在一个表中维护表达式列表的基础。

我的代码是:

library(rlang)
library(tidyverse)

df <- data.frame(a=c("text-1" , "text_2", "text3"))

e1 <- 
  exprs(
    grepl("text-", a) ~ "a",
    grepl("text_", a) ~ "b",
    grepl("text[0-9]", a) ~ "c"
  )

e2 <- 
  exprs(
    grepl("text-", a) ~ 0,
    grepl("text_", a) ~ 1,
    grepl("text[0-9]", a) ~ 2
  )

test <- df %>% mutate(b=case_when(!!!e1),
                      c=case_when(!!!e2)
)
Run Code Online (Sandbox Code Playgroud)

预期结果是:

> test
       a b c
1 text-1 a 0
2 text_2 b 1
3  text3 c 2
Run Code Online (Sandbox Code Playgroud)

但是使用两个具有相同 LHS 的 …

r case-when mutate

5
推荐指数
1
解决办法
569
查看次数

通过 mutate case_when 通过多个条件创建新变量

嗨,想在 dyplr、mutate 和 case_when 的特定条件下通过 2 个变量(WHR 和 sexe)创建一个新变量/列(WHRcat)。

数据:

WHR   sexe  WHRcat (new variable)
1.5    1
2.8    2
0.2    2
0.3    1
1.1    1
Run Code Online (Sandbox Code Playgroud)

我的代码:

test<- test%>% mutate(WHRcat = case_when((WHR >= 1.02 & sexe = 1) ~ 1,
                                         (WHR < 1.02 & sexe = 1) ~ 2,
                                         (WHR >= 0.85 & sexe = 2) ~ 3,
                                         (WHR < 0.85 & sexe = 2) ~ 4,
                                          TRUE ~ 0)) 
Run Code Online (Sandbox Code Playgroud)

虽然不起作用。

错误:

> test<- test%>% mutate(WHRcat = case_when((WHR >= 1.02 & …
Run Code Online (Sandbox Code Playgroud)

variables r case-when dplyr mutate

5
推荐指数
1
解决办法
1万
查看次数

`case_when` 函数中 `~` 后面的条件项

我想在~incase_when函数之后放置一个条件项。我的例子:

df:

df <- structure(list(x = c("a", "a", "a", "b", "b", "b", "c", "c", 
"c", "a", "a", "a"), y = 1:12), class = "data.frame", row.names = c(NA, 
-12L))
Run Code Online (Sandbox Code Playgroud)

不工作的代码:

library(dplyr)
df %>% 
  group_by(x) %>% 
  mutate(y = case_when(x=="b" ~ cumsum(y),
                       TRUE ~ y)) %>% 
  mutate(y = case_when(x=="a" ~ "what I want: last value of group "b" in column y", 
                       TRUE ~ y))
Run Code Online (Sandbox Code Playgroud)

用一句话来说:

  1. group_by x
  2. 计算列中的cumsumby
  3. 取该组 (=b) 的最后一个值 (=15) 和
  4. 将此值 (=15) …

r case-when dplyr tidyverse

5
推荐指数
2
解决办法
102
查看次数

Sum(Case when) 导致选择的多行

我有一张巨大的客户订单表,我想运行一个查询,通过“user_id”按月列出过去 13 个月的订单。我现在所拥有的(如下)有效,但不是只为每个 user_id 列出一行,而是为 user_id 的每个订单列出一行。例如:一个用户在他的一生中总共有 42 个订单,所以它在 42 行中列出了他的 user_id,每行只有一次付款。通常我会把它放在excel的数据透视表中,但我超过了百万行限制,所以我需要它是正确的并且成功率为零。我希望读出的内容如下所示:

用户 ID | jul_12 | aug_12 |

123456 | 150.00 | 150.00 |

不是这个:

用户 ID | jul_12 | aug_12 |

123456 | 0.00 | 150.00 |

123456 | 150.00 | 0.00 |

等等 40多行

SELECT ui.user_id, 
SUM(CASE WHEN date_part('year', o.time_stamp) = 2012 AND date_part('month', o.time_stamp) = 07 THEN o.amount ELSE 0 END) jul_12,
SUM(CASE WHEN date_part('year', o.time_stamp) = 2012 AND date_part('month', o.time_stamp) = 08 THEN o.amount ELSE …
Run Code Online (Sandbox Code Playgroud)

postgresql sum case-when

4
推荐指数
1
解决办法
2万
查看次数

我可以在案例陈述中使用.include?()吗?红宝石

我已经开始学习Ruby了.我有一个小项目来构建游戏并尝试创建一个接收用户输入并相应处理的函数.

def Game.listener
  print "> "

  while listen = $stdin.gets.chomp.downcase

    case listen
    when (listen.include?("navigate"))
      puts "Navigate to #{listen}"
      break
    when ($player_items.include?(listen))
      Items.use(listen)
      break
    end

    puts "Not a option"
    print "> "
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,case语句无法检测到我已键入导航.有没有办法解决这个问题,或者如果我完全关闭,有人能指出我正确的方向吗?

我找到了解决问题的方法,这是一种安全可靠的方法吗?

  while listen = $stdin.gets.chomp
      case listen.include?(listen)
      when listen.include?("navigate")
        puts "Navigate to #{listen}"
      when listen.include?("test")
        puts "test"
      when $player_items.include?(listen)
        puts "Using the #{$player_items[listen]}"
        break
      else
        puts "Not a option"
      end
      print "> "
   end
Run Code Online (Sandbox Code Playgroud)

ruby case include case-when

4
推荐指数
1
解决办法
5180
查看次数

Pyspark 中的多个 WHEN 条件实现

我的 T-SQL 代码低于我在 Pyspark 中转换的代码,但给了我错误

CASE
            WHEN time_on_site.eventaction = 'IN' AND time_on_site.next_action = 'OUT' AND time_on_site.timespent_sec < 72000 THEN 1  --  20 hours 
            WHEN time_on_site.eventaction = 'IN' AND time_on_site.next_action = 'OUT' AND time_on_site.timespent_sec >= 72000 THEN 0
            WHEN time_on_site.eventaction = 'IN' AND time_on_site.next_action = 'IN' AND time_on_site.timespent_sec <= 28800 THEN 2  -- 8 hours
            WHEN time_on_site.eventaction = 'IN' AND time_on_site.next_action = 'IN' AND time_on_site.timespent_sec > 28800 THEN 3
            WHEN time_on_site.type_flag = 'TYPE4' THEN 4
            ELSE NULL
         END AS "type"
Run Code Online (Sandbox Code Playgroud)

下面是我的 …

t-sql case-when .when apache-spark-sql pyspark

4
推荐指数
2
解决办法
6394
查看次数