SQL作业二
目的:通过加载chinook_db文件来把数据导入到sqllite,根据题目的要求进行查询
1.sql语句的基本语法
2.join多表查询的用法
3.group by分组的用法
4.order by排序,limit 页数展示的用法
热身题
1.从Track表中,找到10大作曲家
思路:从Track表中找到作曲家和总数,然后根据作曲家进行分组,在根据数量进行降序排序,获取前10位即为10大作曲家
select count(*) as num,Composer from Track group by Composer order by num desc limit 10;
2.从Track表中,找到时长限定的歌曲
思路:从Track中,找到millseconds列,然后通过给定的区间来获取结果集
select name,milliseconds from Track where milliseconds > 2500000 and milliseconds < 2600000 order by milliseconds;
3.从Album专辑表和Artist艺术家表来获取艺术家名称和关联的专辑名称
思路:使用join关键字,将2张表关联然后从大的结果集中获取字段
select Artist.name, Album.Title from Album join Artist on Artist.ArtistId = Album .ArtistId where name = 'Iron Maiden' or name = 'Amy Winehouse';
实战题:
1.从Invoice表找出发票最多的排名前三的国家
思路:查询BillingCountry和总数,根据BillingCountry进行分组,然后根据总数降序排列,最后使用limit 3获取排名前三的数据
select BillingCountry,count(*) as num
from Invoice
group by BillingCountry
order by num desc
limit 3
2.从Customer表和Invoice表找出的最佳客户的电子邮件
思路:将Customer表和Invoice表通过CustomerId进行关联,根据email进行分组,根据total进行排序,最后使用limit 1获取最佳客户的邮件
SELECT c.email,c.firstname,c.lastname,sum(i.total) as Total
from Customer c
join Invoice i on c.CustomerId = i.CustomerId
group by c.email
order by Total desc
limit 1
3.推广摇滚音乐
思路:从Customer,Invoice,InvoiceLine,Track,Genre表中获取摇滚乐听众的邮箱,姓名,以及喜爱的音乐,注意表关联的字段
SELECT c.email,c.firstname,c.lastname,g.name
from Customer c
join Invoice i on c.CustomerId = i.CustomerId
join InvoiceLine il on i.InvoiceId = il.InvoiceId
join Track t on il.TrackId = t.TrackId
join Genre g on t.GenreId = g.GenreId
where g.name = "Rock"
group by c.email
order by c.email
4.音乐宣传活动
思路:从Invoice返回账单总额最高的城市,同2
SELECT BillingCity,sum(Total) as Total
from Invoice
group by BillingCity
order by Total desc
limit 1
5.城市热门音乐排行
思路:从Invoice,InvoiceLine,Track,Genre表中返回布拉格最流行的三大音乐风格
SELECT i.BillingCity,count(*) as num,g.name
from Invoice i
join InvoiceLine il on i.InvoiceId = il.InvoiceId
join Track t on il.TrackId = t.TrackId
join Genre g on t.GenreId = g.GenreId
where BillingCity = "Prague"
group by g.name
order by num desc
limit 3
6.寻找音乐家
思路:从Genre,Track,Album,Artist表中返回前10大摇滚音乐人的姓名和歌曲总数
SELECT a.name,count(g.name) as num
from Genre g
join Track t on g.GenreId = t.GenreId
join Album al on t.AlbumId = al.AlbumId
join Artist a on al.ArtistId = a.ArtistId
where g.name = "Rock"
group by a.name
order by num desc
limit 10
7.直通法国
思路:从Invoice,InvoiceLine,Track,Genre表中返回法国的账单城市,并且音乐的类型是朋克摇滚,把歌曲数量按照降序排列
SELECT i.BillingCity,count(g.name) as NumTracks
from Invoice i
join InvoiceLine il on i.InvoiceId = il.InvoiceId
join Track t on il.TrackId = t.TrackId
join Genre g on t.GenreId = g.GenreId
where i.BillingCountry = "France"
and g.name = "Alternative & Punk"
group by i.BillingCity
order by NumTracks desc
8.本地查询,爵士乐音轨
思路:从Customer,InvoiceLine,Invoice,Track和Genre找出类型为jazz的音乐种类,在来统计买了jazz音乐的消费者,注意去重
select count(distinct(c.CustomerId))
from Customer c join Invoice i on c.CustomerId = i.CustomerId
join InvoiceLine il on i.InvoiceId = il.InvoiceId
join Track t on il.TrackId = t.TrackId
join Genre g on t.GenreId = g.GenreId
where g.name = 'Jazz'
GROUP BY g.name
9.本地查询,低于平均值的歌曲长度
思路:先把Genre和Track表中的平均音乐长度取出作为外部查询的条件,然后外部整合Genre,Track和子查询结果在根据Genre的name分组,最后得出结果
select count(Genre.Name) as num ,Genre.Name
from Genre,Track,
(SELECT avg(Milliseconds) as average FROM Genre,Track WHERE Genre.GenreId=Track.GenreId) as subquery
where Track.GenreId = Genre.GenreId
and Track.Milliseconds < average
GROUP BY Genre.Name
ORDER BY num DESC
10.本地查询,连接媒体类型与音轨
思路:将Track,Genre,和MediaType的相关字段关联起来,找出Genre名称是pop并且MediaType的名称是MPEG的结果即可
select count(Genre.Name)
from Genre,Track,MediaType
where Track.GenreId = Genre.GenreId
and Track.MediaTypeId = MediaType.MediaTypeId
and MediaType.Name='MPEG audio file'
and Genre.Name='Pop'
表结构整理,根据字段的对应关系整理
SQL作业二的更多相关文章
- 一探究竟:善用 MaxCompute Studio 分析 SQL 作业
头疼的问题 MaxCompute 用户一个常见的问题是:同一个周期任务,为什么最近几天比之前慢了很多?或者为什么之前都能按时产出的作业最近经常破线? 通常来说,引起作业执行变慢的原因有:quota 组 ...
- 如何跑通第一个 SQL 作业
简介: 本文由阿里巴巴技术专家周凯波(宝牛)分享,主要介绍如何跑通第一个SQL. 一.SQL的基本概念 1.SQL 分类 SQL分为四类,分别是数据查询语言(DQL).数据操纵语言(DML).数据定义 ...
- Python学习之编写三级菜单(Day1,作业二)
作业二:多级菜单 三级菜单 可依次进入各子菜单 在各级菜单中输入B返回上一级Q退出程序 知识点:字典的操作,while循环,for循环,if判断 思路: 1.开始,打印一级菜单让用户进行选择(可以输入 ...
- MS SQL作业Schedule的限制注意事项
最近遇到了一个关于MS SQL作业Schedule下有限制的特殊案例,有一个作业,用户要求执行的时间为:9:30,14:30,16:30, 19:00,于是我设置了两个Schedule,其中一个每 ...
- 数据库学习---SQL基础(二)
数据库学习---SQL基础(一) 数据库学习---SQL基础(二) 数据库学习---SQL基础(三) 上篇复习的sql的增删改查,and ,or ,>=, <=,!=等逻辑运算符,还有in ...
- day1作业二:多级菜单操作
作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 思路: (1)首先定义好三级菜单字典: (2)提 ...
- day1作业二:多级菜单操作(函数实现)
作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 本示例的三级菜单是一个yaml文件格式,格式如下 ...
- day1 作业二:多级菜单操作
作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入b返回上一层,输入q退出整个程序 思路:三级菜单第一级别是省,第二级别是市,第三级别是县,用户 ...
- day1作业二:多级菜单
作业二:多级菜单 1.三级菜单 2.可以次选择进入各子菜单 3.所需新知识点:列表.字典 4.打印b回到上一层 5.打印q退出循环 流程图如下: readme: (1)存储三级菜单的字典;设置 ...
随机推荐
- 读书笔记-JavaScript面向对象编程(三)
第7章 浏览器环境 7.1 在HTML页面中引入JavaScript代码 7.2概述BOM与DOM(页面以外事物对象和当前页面对象) 7.3 BOM 7.3.1 window对象再探(所以JavaSc ...
- python数据集处理
一.如何删除数据里中的某一列 1)打开文件open() 2)for循环读取文件的每一行 strip()--去除首尾的空格,split()--以空格分割数据.返回list数据 /** 这一部分对数据集进 ...
- deeplearning.ai 神经网络和深度学习 week1 深度学习概论 听课笔记
1. 预测房价.广告点击率:典型的神经网络,standard NN. 图像:卷积神经网络,CNN. 一维序列数据,如音频,翻译:循环神经网络,RNN. 无人驾驶,涉及到图像.雷达等更多的数据类型:混合 ...
- 51 Nod 1028 大数乘法 V2【Java大数乱搞】
1028 大数乘法 V2 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B (A ...
- HDU1159-Common Subsequence-LCS
上次写题解写到一半,写的比较具体,没写完,忘记存草稿了...导致现在没心情了. Common Subsequence Time Limit: 2000/1000 MS (Java/Others) ...
- Version 1.7.0_80 of the JVM is not suitable for this product.Version: 1.8 or greater is required.
Eclipse启动失败,设置eclipse启动jdk有2种方法 第一种: 直接安装eclipse对应的jdk版本,并设置环境变量 第二种: 修改eclipse配置文件eclipse.ini 在plug ...
- (实用篇)使用PHP生成PDF文档
http://mp.weixin.qq.com/s?__biz=MzIxMDA0OTcxNA==&mid=2654254929&idx=1&sn=8715d008d19af70 ...
- 织梦dedeCMS留言薄
dedeCMS留言薄模塊名爲guestbook, 留言薄模板:/templets/plus/guestbook.htm; 留言回覆模板: 管理員回覆調用/templets/plus/guestbook ...
- Vuejs实例-00Vuejs2.0全家桶结合ELementUI制作后台管理系统
Vuejs2.0全家桶结合ELementUI制作后台管理系统 0: 系统环境的介绍 1: Vuejs实例-01使用vue-cli脚手架搭建Vue.js项目 2: Vuejs实例-02Vue.js项目集 ...
- dedecms_分页技术
<ul>{dede:list pagesize='30'} <li><a href="[field:arcurl/]">[field:title ...