首页 > 数据库 >力扣608(MySQL)-树节点(中等)

力扣608(MySQL)-树节点(中等)

时间:2023-04-02 09:33:16浏览次数:37  
标签:语句 ... tree when 608 id 力扣 MySQL 节点

题目:

给定一个表 tree,id 是树节点的编号, p_id 是它父节点的 id 。

 

树中每个节点属于以下三种类型之一:

叶子:如果这个节点没有任何孩子节点。
根:如果这个节点是整棵树的根,即没有父节点。
内部节点:如果这个节点既不是叶子节点也不是根节点。

写一个查询语句,输出所有节点的编号和节点的类型,并将结果按照节点编号排序。上面样例的结果为:

 

解释

节点 '1' 是根节点,因为它的父节点是 NULL ,同时它有孩子节点 '2' 和 '3' 。
节点 '2' 是内部节点,因为它有父节点 '1' ,也有孩子节点 '4' 和 '5' 。
节点 '3', '4' 和 '5' 都是叶子节点,因为它们都有父节点同时没有孩子节点。
样例中树的形态如下

 注意

如果树中只有一个节点,你只需要输出它的根属性。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/tree-node
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

方法一:使用CASE...WHEN....

先判断如果p_id为null就为根节点,如果id在p_id里面的话就是内部结点,其他都是叶子结点。

 1 # Write your MySQL query statement below
 2 select id,
 3 case
 4     when p_id is null then 'Root'
 5     when id in(
 6        select p_id
 7        from tree
 8     ) then 'Inner'
 9     else 'Leaf'
10 end AS type
11 from tree;

方法二:IF

1 select id,
2    if(isnull(p_id),'Root',
3       if(
4         id in (select p_id from tree),'Inner','Leaf') )as Type  
5 from tree 

小知识:

①case ... when...语法

情况一:

case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end

情况二:

case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1
when 常量2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end

举例:

1 SELECT `店号`,`商品编码`,`销售数量`,
2 CASE 
3    WHEN `销售数量` > 250 THEN '优'
4      WHEN `销售数量` > 150 THEN '良'
5      WHEN `销售数量` > 100 THEN '中'
6      ELSE '差'
7    END AS 评级
8  FROM `销售表`;

②if语法:

if(表达式成立,返回值,否则返回值)
-- 如果销售数量> 100的就为优秀,否则为一般
SELECT *,IF(`销售数量` > 200,'优秀','一般') AS 评价 FROM `销售表`;  

 

标签:语句,...,tree,when,608,id,力扣,MySQL,节点
From: https://www.cnblogs.com/liu-myu/p/17279925.html

相关文章

  • 在业务中有个SQL语句导致mysql锁表,该SQL为重要业务使用不能kill,解决方案
    在业务中有个SQL语句导致mysql锁表,该SQL为重要业务使用不能kill,怎么快速恢复如果有一个重要业务正在使用导致了MySQL表的锁定,不能通过终止相关的MySQL进程来解除表锁定,需要采取其他措施来快速恢复业务。以下是一些可能有用的步骤:使用MySQL的SHOWPROCESSLIST命令来查看当前正......
  • Linux服务器MySQL操作总结
    目录1.Navicat连接服务器MySQL2.如何查看MySQL用户名和密码3.修改MySQL的登录密码4.安装MySQL开发包(Centos7版)错误:error1045(28000):accessdeniedforuser'root'@'localhost'(usingpassword:yes)1.Navicat连接服务器MySQL1.选择数据库直接使用第一个MySQL即可......
  • MySql怎么批量删除多个表
    项目场景:使用Navicat工具直接在界面中删除,只能单张表删除,不能多选解决方案:我们可以通过MySQL的语句来批量删除多个表,其中you_database替换成你要查询的数据库名字delete_table改成你要删除匹配的数据表。1.生成删除某个数据库下所有的表SQL--查询构建批量删除表语句(根据数......
  • Flink与mysql结合
    在流式计算中,不是有时候需要和mysql进行结合做一些处理。 1.调用其他方法进行  2.更快的处理使用guava本地缓存对msql的操作是new对象过来privatefinalstaticRuleServiceruleService=newRuleService();finalstaticCache<Long,Ma......
  • mysql二进制文件安装方式
    安装进制包如果用户既不想安装最简单却不够灵活的RPM包,又不想安装复杂费时的源码包,那么,已经编泽好的二进制包将是很好的选择具体安装步骤如下。(1用root登录操作系统,增加mysql用户和组,数据库将安装在此用户下:she1l>groupaddmysalshell>useradd-gmysqlmysal(2)解压二进制安......
  • 三天吃透MySQL面试八股文
    什么是MySQLMySQL是一个关系型数据库,它采用表的形式来存储数据。你可以理解成是Excel表格,既然是表的形式存储数据,就有表结构(行和列)。行代表每一行数据,列代表该行中的每个值。列上的值是有数据类型的,比如:整数、字符串、日期等等。数据库的三大范式第一范式1NF确保数据库表字段......
  • 《Mysql基础》【Mysql触发器 新建触发器、修改触发器、删除触发器、举例】 编程入门
     --mysql数据库程序设计笔记:--=========第八章:触发器========================触发器:触发执行特定事件。(关联表对象,当特定事件出现时,触发激活)目的:保护表数据,(保证表数据完整性和一致性。)1、新建触发器:格式:createtrigger数据库名.触发器名称触发时刻inserton表名f......
  • 《Mysql基础》【Mysql表查询、去重、表连接、左连接 右连接、子表查询、排序、分组等
     --mysql数据库程序设计笔记:第三章:查询1、单表查询:1)、简单查询查所有列:格式:select*from表名;举例:mysql>select*fromtb_student;+----+-----------+-------------+------+------------+----------+--------+---------+-------------------+|id|studentNo|s......
  • mysql - 存储过程
    定义存储过程(storedprocedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行。分类存储过程分为系统存储过程和自定义存储过程。1)系统存储过程在master数据库中,但是在其他的数据库中可以直接调用,并且在调用时不必在存......
  • 《Mysql基础》【Mysql表的基本操作 新建表、修改表、删除表、外键约束、主键约束、完
     --mysql数据库程序设计笔记:表基本操作:1、新建表:格式如:1)、建表加主键:createtable表名(idintNOTNULLauto_incrementcomment'自增主键id',列名类型(范围)comment'列备注',...primarykey(id))engine=InnoDB;2)、建表加候选键副键约束createtable表名......