小白刷sql进行第三天 ,今天刷的题目有三道
1667.修复表中的文字 用到了concat()
1484. 按日期分组销售产品 用到了count 和 group_count()
1527. 患某种疾病的患者 用到了like 匹配
其实本题主要考察的就是计算字段的使用。
CONCAT 可以将多个字符串拼接在一起。
从左开始截取字符串,length 是截取的长度。
UPPER(str) 将字符串中所有字符转为大写
LOWER(str) 将字符串中所有字符转为小写
截取字符串,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
# 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
# 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
因为查询的信息名称与原表相同,所以我是在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’表示空格.