我正在打一个棒球相关的网站.我有一个桌子,有两个棒球队的击球阵容:
+----+----------+--------------+--------+
| id | playerId | battingOrder | active |
+----+----------+--------------+--------+
Run Code Online (Sandbox Code Playgroud)
击球顺序是1到20之间的整数.这对应于以下逻辑:
活动字段是一个tinyint 0或1,表示土墩上的投手和盘子上的击球手.
已知事实:一支球队总会有一名主动投手,另一支球队将有一名主动投手.
我需要编写一个查询,为主队球员返回一个对应于battingOrder中下一个击球手的行.(在活动击球手的击球后发生的那个)
例:
我之前从未使用过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) 我有以下代码:
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) 该问题的语句是:
把大陆说得对...
- 大洋洲成为澳大拉西亚
- 欧亚大陆和土耳其的国家去欧洲/亚洲
- 以'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得到的结果是"错误答案.有些数据不正确."
如果记录的某个其他值为true,我想要一个使用两个值/列中较大值的查询.
我正在尝试获取报告帐户.不幸的是,DB通常将Cash的值存储在一个名为的列中HoldingQty,而对于其他每种类型的持有(股票,债券,共同基金),它将其存储在一个名为的列中Qty.
问题在于,有时候现金的价值Qty只存储在,而有时则存在于Qty和HoldingQty.显然有时候它只是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) 根据一列中的文本,我想为另外两列分配一个字符和一个整数。用于将字符分配给一列和整数分配给另一列的多个 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 的 …
嗨,想在 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) 我想在~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)
用一句话来说:
group_by xcumsum组by我有一张巨大的客户订单表,我想运行一个查询,通过“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) 我已经开始学习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) 我的 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)
下面是我的 …