• 小白刷力扣 之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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 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
    ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    like的做法

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

    正则表达式

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

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

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

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

  • 相关阅读:
    这么有料的福利,你还不赶紧关注一波吗?(代码合集)
    数据结构与算法之排序: 快速排序 (Javascript版)
    LVS-DR模式
    MeterSphere开源项目GitHub Star数量超过8000!
    【无标题】
    Go:模幂算法(附完整源码)
    boost之string_ref
    iOS开发UITableView的使用,区别Plain模式和Grouped模式
    AH Formatter V7.2 MR7更新
    装饰器模式
  • 原文地址:https://blog.csdn.net/qq_34589842/article/details/127133061