首页 > 试题广场 >

比赛结果result表内容如下: &nb...

[单选题]
比赛结果result表内容如下:
Date                     Win
2017-07-12               胜
2017-07-12               负
2017-07-15               胜
2017-07-15               负
如果要生成下列结果, 正确的sql语句是:(      )
比赛日期            胜     负
2017-07-12          1      1
2017-07-15          1      1

  • select Date As 比赛日期, (case when Win='胜' then 1 else 0 end) 胜, (case when Win='负' then 1 else 0 end) 负 from result group by Date
  • select Date As 比赛日期, SUM(case when Win='胜' then 1 else 0 end) 胜, SUM(case when Win='负' then 1 else 0 end) 负 from result
  • select Date As 比赛日期, SUM( when Win='胜' then 1 else 0 end) 胜, SUM( when Win='负' then 1 else 0 end) 负 from result group by Date
  • select Date As 比赛日期, SUM(case when Win='胜' then 1 else 0 end) 胜, SUM(case when Win='负' then 1 else 0 end) 负 from result group by Date
由比赛结果根据日期进行分组,利用case when.....then .....语句查询 基本格式:SELECT 属性字段(列名) CASE 列名 WHEN '列名值1' THEN '结果值1' WHEN '列名值2' THEN '结果值2' case........ ELSE '其他' 注:Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略
发表于 2020-05-12 22:36:04 回复(0)
a错,因为胜和负这两列不在聚合建中,会报错;
b错,因为没有group by分组,最后的结果会是4行,且这个sum也没有意义;
c错,因为case ... when ... then ... else ... end是一个固定搭配(简写,具体语法请百度)。

另外这道题主要考两个点:一个是case when语句,一个是group by。
解释一下group by:
使用了group by子句以后,SELECT 子句中的元素有严格的限制。
为什么要限制呢?
因为group by对指定列分组了,比如题中的以Date分组,那么分组以后,Date跟Win就不再是一对一的关系了,比如题中的2020/07/12实际上对应有两个Win,一个胜,一个负。这就很尴尬了,如果select字句堂而皇之的写上Win,比如 Select Date,Win from xxx group by Date,就会出现歧义,一对二呢,对不上呀!
所以说select字句中的元素不能再随便指定了,是有要求的。
实际上,使用group by时,SELECT 子句中只能存在以下三种元素:
    1. 常数
    2. 聚合函数
    3. GROUP BY子句中指定的列名(也就是聚合键)
比如说选项中就使用了Sum对Date对应的两个结果做了一个求和操作,这样Date与Sum(Win)就是一对一的关系了。
当然,使用sum只是为了满足本题要求统计比赛场数的要求,实际上如果单单是想要满足group by的要求,同样的这里替换为count,max,min都是可以的,因为我们并不需要用到聚合函数的实际意义。
编辑于 2021-04-21 21:56:23 回复(6)
一个SQL菜鸡的解析:根本没有when,只有case when!!!
发表于 2020-03-14 09:00:29 回复(0)
case when <pred> then <result> ... else <result>  end  是一个组合。

编辑于 2020-06-17 21:54:43 回复(4)
A没有累计,B没有分组
发表于 2020-02-22 12:49:54 回复(0)

类似if()else if(){}...else{}语句   case when条件then结果处理  when条件then结果处理... end

发表于 2021-06-03 22:32:07 回复(0)
sum(条件表达式),如果记录满足条件表达式就加1,统计满足条件表达式的行数。
发表于 2021-04-29 13:43:44 回复(0)
select game_date as '比赛日期', sum(case when scores ='胜' then 1 else 0 end) as '胜',sum(case when scores ='胜'
then 0 else 1 end) as '负' from games group by game_date;

本题关键是用as创建新列,然后用case when 及sum 汇总来赋值。
发表于 2020-05-16 11:46:56 回复(0)
case when then else end
编辑于 2024-02-23 21:00:44 回复(0)
A的答案
编辑于 2023-12-25 23:08:16 回复(0)
A为什么错,不累计不行吗?
发表于 2023-09-22 17:17:58 回复(0)
case when then 语句
发表于 2022-01-19 21:28:14 回复(0)
如果sum 改为count呢
发表于 2021-11-04 23:02:27 回复(1)
为什么我做题看不全答案,只有三个选项,解析就全看到的
发表于 2021-11-02 09:14:58 回复(0)
sum(条件),记录满足条件表达式就会加1,统计满足条件表达式的行数
发表于 2021-10-31 20:54:22 回复(0)
前面找sum,后面找group by就对了
发表于 2021-10-17 09:37:41 回复(0)
case when有两种写法。
发表于 2021-08-18 04:27:26 回复(0)
注意 1 case when then 语句 2 聚合函数的使用
发表于 2021-03-24 22:51:19 回复(0)
<p>Mysql case when 的用法。</p><p>case value when value1 then …when value2 then ……else valuen end 别名</p><p><br></p><p>case when expr(表达式)then … when expr2 then……</p><p><br></p><p><br></p><p><br></p>
发表于 2020-11-20 13:09:59 回复(0)
分组表示
发表于 2020-09-11 11:38:31 回复(0)