力扣sql刷题系列(三)

本文是力扣SQL刷题系列的第三部分,涉及了如何进行数据透视操作,展示学生地理信息报告,以及一系列的产品销售分析问题。通过解决618. 学生地理信息报告、619. 只出现一次的最大数字等题目,讲解了SQL中的子查询、排序、分组等技巧,旨在提升SQL查询和数据分析能力。
摘要由CSDN通过智能技术生成
618. 学生地理信息报告
Create table If Not Exists Student (name varchar(50), continent varchar(7))
Truncate table Student
insert into Student (name, continent) values ('Jane', 'America')
insert into Student (name, continent) values ('Pascal', 'Europe')
insert into Student (name, continent) values ('Xi', 'Asia')
insert into Student (name, continent) values ('Jack', 'America')

表: student

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| name        | varchar |
| continent   | varchar |
+-------------+---------+
该表没有主键。它可能包含重复的行。
该表的每一行表示学生的名字和他们来自的大陆。

一所学校有来自亚洲、欧洲和美洲的学生。

写一个查询语句实现对大洲(continent)列的 透视表 操作,使得每个学生按照姓名的字母顺序依次排列在对应的大洲下面。输出的标题应依次为美洲(America)、亚洲(Asia)和欧洲(Europe)。

测试用例的生成使得来自美国的学生人数不少于亚洲或欧洲的学生人数。

查询结果格式如下所示。

示例 1:

输入: 
Student table:
+--------+-----------+
| name   | continent |
+--------+-----------+
| Jane   | America   |
| Pascal | Europe    |
| Xi     | Asia      |
| Jack   | America   |
+--------+-----------+
输出: 
+---------+------+--------+
| America | Asia | Europe |
+---------+------+--------+
| Jack    | Xi   | Pascal |
| Jane    | null | null   |
+---------+------+--------+

题解一:直接使用子查询

注意on后面要以第一个非null 为主就是t3这边

select
  America,
  Asia,
  Europe
from
  (
    select
      name as America,
      row_number() over(
        order by
          name
      ) rk
    from
      student
    where
      continent = 'America'
  ) t1
  left join (
    select
      name as Asia,
      row_number() over(
        order by
          name
      ) rk
    from
      student
    where
      continent = 'Asia'
  ) t2 on t1.rk = t2.rk
  left join (
    select
      name as Europe,
      row_number() over(
        order by
          name
      ) rk
    from
      student
    where
      continent = 'Europe'
  ) t3 on t1.rk = t3.rk;

题解二 换了一个排序思路

select
	America, Asia, Europe
from (select @america:=0, @europe:=0, @asia:=0) as init, (
	select
		name as America,
		@america:= @america + 1 as america_id
	from student where continent 
力扣LeetCode)是一个全球性的编程练习平台,它提供了大量的编程题目,涵盖了从基础到高级不同难度的算法和数据结构题目,适用于刷题者在准备技术面试时进行系统训练。对于Python编程语言的学习者而言,力扣提供了一个良好的环境来练习Python编程,并通过解决实际问题来提升解决问题的能力。 使用Python在力扣刷题的指南可以包括以下几个步骤: 1. 注册和登录:首先访问力扣官网并注册一个账户,然后登录账户。 2. 选择题库:根据个人的需要和目标选择适合的题库进行练习。力扣提供了不同难度级别的题目,以及按专题分类的题目。 3. 学习Python基础知识:在开始刷题之前,确保你对Python语言的基础知识有扎实的掌握,比如数据类型、控制结构、函数、类和对象等。 4. 阅读题目要求:详细阅读题目描述,理解题目要解决的问题是什么,并注意题目中给定的任何约束条件。 5. 编写解决方案:根据题目要求,尝试用Python编写解决方案。开始时可以先不考虑效率,确保能够实现功能。 6. 测试和调试:在力扣的代码编辑器中编写代码,并使用提供的测试用例来检查代码的正确性。调试代码,直到通过所有测试用例。 7. 优化代码:在确保代码正确的前提下,尝试优化代码的性能和可读性。 8. 学习解题思路:参考其他用户的解题思路和讨论,了解不同的解决方案和算法。 9. 定期复习:定期回到之前的题目,回顾和解决之前未能解决的题目,或者寻找更优的解决方案。 10. 参与讨论:在遇到困难时,可以参与力扣上的讨论区,与他人交流解题思路和算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值