小白刷力扣 之SQL学习计划 第3天(第1667题,第1484题,第1527题)

小白刷sql进行第三天 ,今天刷的题目有三道
1667.修复表中的文字 用到了concat()
1484. 按日期分组销售产品 用到了count 和 group_count()
1527. 患某种疾病的患者 用到了like 匹配


1667. 修复表中的名字

在这里插入图片描述

一、计算字段

其实本题主要考察的就是计算字段的使用。

二、知识点

2.1 CONCAT() 函数

CONCAT 可以将多个字符串拼接在一起。

2.2 LEFT(str, length) 函数

从左开始截取字符串,length 是截取的长度。

2.3 UPPER(str) 与 LOWER(str)

UPPER(str) 将字符串中所有字符转为大写
LOWER(str) 将字符串中所有字符转为小写

2.4 SUBSTRING(str, begin, end)

截取字符串,end 不写默认为空。

#SUBSTRING(name, 2) 从第二个截取到末尾,注意并不是下标,就是第二个。
CONCAT 用来拼接字符串 ● LEFT 从左边截取字符 ● RIGHT 从右边截取字符 ● UPPER 变为大写 ● LOWER 变为小写 ● LENGTH 获取字符串长度


select 
user_id,
 CONCAT(UPPER(left(name, 1)), 
 LOWER(RIGHT(name, length(name) - 1))) as name
from Users
order by user_id
  • CONCAT 可以将多个字符串拼接在一起。
  • UPPER(str) 将字符串中所有字符转为大写
  • LOWER(str) 将字符串中所有字符转为小写

1484. 按日期分组销售产品

在这里插入图片描述

# Write your MySQL query statement below
SELECT sell_date,
    COUNT(DISTINCT product) AS num_sold,
    GROUP_CONCAT(DISTINCT product ORDER BY product asc SEPARATOR ',') AS products
FROM Activities 
GROUP BY sell_date
ORDER BY sell_date
;

group_concat用法:
group_concat([去重:distinct] ‘字符串’ [排序:group by 该字符串 asc/desc] 分隔符:separator ‘,’)

理解:group_concat()函数,顾名思义与group by 有关,功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
所以最后是对sell_date分组才能达到效果,group by sell_da

1527. 患某种疾病的患者

在这里插入图片描述

# Write your MySQL query statement below
SELECT 
      patient_id,
      patient_name,
      conditions
FROM  
      Patients
WHERE 
      conditions like '% DIAB1%' 
      OR
      conditions like 'DIAB1%'
ORDER BY
      patient_id

like的做法

因为查询的信息名称与原表相同,所以我是在select后直接写的 * ,"DIAB1%“是查询该类在排头的情况;”% DIAB1%"是查询该类处在后面的情况,因为类与类之间存在空格,这样也避免了"AADIAB1~"处于类中间的情况。

正则表达式

SELECT * FROM PATIENTS
WHERE CONDITIONS REGEXP '^DIAB1|\\sDIAB1'

不可直接使用CONDITIONS REGEXP 'DIAB1’筛选,因为DIAB1可能不是前缀,例如

{"headers": ["patient_id", "patient_name", "conditions"], "values": [[1, "Daniel", "SADIAB100"]]}

因为不同的疾病使用一个空格分开,所以患有I型糖尿病的患者的conditions有两种情况
糖尿病位于第一个时: 以DIAB1开始,即CONDITIONS REGEXP '^DIAB1
糖尿病不是第一个时: 含有 空格DIAB1,即CONDITIONS REGEXP ‘\sDIAB1,其中’\s’表示空格.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值