1667. 修复表中的名字
🚀 表: Users +----------------+---------+ | Column Name | Type | +----------------+---------+ | user_id | int | | name | varchar | +----------------+---------+ user_id 是该表的主键。 该表包含用户的 ID 和名字。名字仅由小写和大写字符组成。 🚀 需求 编写一个 SQL 查询来修复名字,使得只有第一个字符是大写的,其余都是小写的。 返回按 user_id 排序的结果表。 查询结果格式示例如下。 示例 1: 输入: Users table: +---------+-------+ | user_id | name | +---------+-------+ | 1 | aLice | | 2 | bOB | +---------+-------+ 输出: +---------+-------+ | user_id | name | +---------+-------+ | 1 | Alice | | 2 | Bob | +---------+-------+ 🐴🐴 答案 # Write your MySQL query statement below select user_id, concat(upper(left(name,1)),lower(substr(name,2))) name from Users order by user_id /* Write your T-SQL query statement below */ select user_id, UPPER(substring(name,1,1))+LOWER(substring(name,2,len(name)-1)) name from Users order by user_id /* Write your PL/SQL query statement below */ select user_id "user_id", initcap(name) "name" from Users order by 1
1484. 按日期分组销售产品
🚀表 Activities: +-------------+---------+ | 列名 | 类型 | +-------------+---------+ | sell_date | date | | product | varchar | +-------------+---------+ 此表没有主键,它可能包含重复项。 此表的每一行都包含产品名称和在市场上销售的日期。 🚀 需求 编写一个 SQL 查询来查找每个日期、销售的不同产品的数量及其名称。 每个日期的销售产品名称应按词典序排列。 返回按 sell_date 排序的结果表。 查询结果格式如下例所示。 示例 1: 输入: Activities 表: +------------+-------------+ | sell_date | product | +------------+-------------+ | 2020-05-30 | Headphone | | 2020-06-01 | Pencil | | 2020-06-02 | Mask | | 2020-05-30 | Basketball | | 2020-06-01 | Bible | | 2020-06-02 | Mask | | 2020-05-30 | T-Shirt | +------------+-------------+ 输出: +------------+----------+------------------------------+ | sell_date | num_sold | products | +------------+----------+------------------------------+ | 2020-05-30 | 3 | Basketball,Headphone,T-shirt | | 2020-06-01 | 2 | Bible,Pencil | | 2020-06-02 | 1 | Mask | +------------+----------+------------------------------+ 解释: 对于2020-05-30,出售的物品是 (Headphone, Basketball, T-shirt),按词典序排列,并用逗号 ',' 分隔。 对于2020-06-01,出售的物品是 (Pencil, Bible),按词典序排列,并用逗号分隔。 对于2020-06-02,出售的物品是 (Mask),只需返回该物品名。 🐴🐴 答案 # Write your MySQL query statement below select sell_date, count(distinct product) as num_sold, group_concat(distinct product) as products from Activities group by sell_date /* Write your T-SQL query statement below */ SELECT STUFF((SELECT ','+product FROM Activities for xml path('')),1,1,'') /* Write your T-SQL query statement below */ select sell_date, count(distinct product) as num_sold, stuff((select distinct ','+product from Activities a where a.sell_date=b.sell_date for xml path('')),1,1,'') AS products from Activities b group by sell_date /* Write your PL/SQL query statement below */ select sell_date "sell_date", count(distinct product) as "num_sold", wm_concat(distinct product) as "products" from Activities group by sell_date
1527. 患某种疾病的患者
🚀 患者信息表: Patients +--------------+---------+ | Column Name | Type | +--------------+---------+ | patient_id | int | | patient_name | varchar | | conditions | varchar | +--------------+---------+ patient_id (患者 ID)是该表的主键。 'conditions' (疾病)包含 0 个或以上的疾病代码,以空格分隔。 这个表包含医院中患者的信息。 写一条 SQL 语句,查询患有 I 类糖尿病的患者 ID (patient_id)、患者姓名(patient_name)以及其患有的所有疾病代码(conditions)。 I 类糖尿病的代码总是包含前缀 DIAB1 。 按 任意顺序 返回结果表。 查询结果格式如下示例所示。 🚀 需求 示例 1: 输入: Patients表: +------------+--------------+--------------+ | patient_id | patient_name | conditions | +------------+--------------+--------------+ | 1 | Daniel | YFEV COUGH | | 2 | Alice | | | 3 | Bob | DIAB100 MYOP | | 4 | George | ACNE DIAB100 | | 5 | Alain | DIAB201 | +------------+--------------+--------------+ 输出: +------------+--------------+--------------+ | patient_id | patient_name | conditions | +------------+--------------+--------------+ | 3 | Bob | DIAB100 MYOP | | 4 | George | ACNE DIAB100 | +------------+--------------+--------------+ 解释:Bob 和 George 都患有代码以 DIAB1 开头的疾病。 🐴🐴 答案 # Write your MySQL query statement below SELECT select * FROM Patients WHERE conditions REGEXP '^DIAB1|\\sDIAB1' /* Write your PL/SQL query statement below */ select patient_id "patient_id", patient_name "patient_name", conditions "conditions" from Patients where regexp_like(conditions,'^DIAB1|\ s*DIAB1') 以下为Oracle的正则表达式 ^ 匹配一个字符串的开始。如果与“m” 的match_parameter一起使用,则匹配表达式中任何位置的行的开头。 $ 匹配字符串的结尾。如果与“m” 的match_parameter一起使用,则匹配表达式中任何位置的行的末尾。 * 匹配零个或多个。 + 匹配一个或多个出现。 ? 匹配零次或一次出现。 。 匹配任何字符,除了空。 | 用“OR”来指定多个选项。 [] 用于指定一个匹配列表,您尝试匹配列表中的任何一个字符。 [^] 用于指定一个不匹配的列表,您尝试匹配除列表中的字符以外的任何字符。 () 用于将表达式分组为一个子表达式。 {M} 匹配m次。 {M,} 至少匹配m次。 {M,N} 至少匹配m次,但不多于n次。 \ n n是1到9之间的数字。在遇到\ n之前匹配在()内找到的第n个子表达式。 [..] 匹配一个可以多于一个字符的整理元素。 [:] 匹配字符类。 [==] 匹配等价类。 \ d 匹配一个数字字符。 \ D 匹配一个非数字字符。 \ w 匹配包括下划线的任何单词字符。 \ W 匹配任何非单词字符。 \ s 匹配任何空白字符,包括空格,制表符,换页符等等。 \ S 匹配任何非空白字符。 \A 在换行符之前匹配字符串的开头或匹配字符串的末尾。 \Z 匹配字符串的末尾。 *? 匹配前面的模式零次或多次发生。 +? 匹配前面的模式一个或多个事件。 ?? 匹配前面的模式零次或一次出现。 {N}? 匹配前面的模式n次。 {N,}? 匹配前面的模式至少n次。 {N,M}? 匹配前面的模式至少n次,但不超过m次。