【Leecode-专项突破-SQL入门】day5

美好的周末又要结束了,今天出门看了个电影,回来脑袋有点晕~边听歌边做题,还好今天的专项训练不太难,不会做得头痛哈哈。
一共 3 道题:3 简单

175.组合两个表

输入: 
Person表:
+----------+----------+-----------+
| personId | lastName | firstName |
+----------+----------+-----------+
| 1        | Wang     | Allen     |
| 2        | Alice    | Bob       |
+----------+----------+-----------+
Address表:
+-----------+----------+---------------+------------+
| addressId | personId | city          | state      |
+-----------+----------+---------------+------------+
| 1         | 2        | New York City | New York   |
| 2         | 3        | Leetcode      | California |
+-----------+----------+---------------+------------+
输出: 
+-----------+----------+---------------+----------+
| firstName | lastName | city          | state    |
+-----------+----------+---------------+----------+
| Allen     | Wang     | Null          | Null     |
| Bob       | Alice    | New York City | New York |
+-----------+----------+---------------+----------+

编写一个SQL查询来报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为空 null。以 任意顺序 返回结果表。
非常简单的一道题,思路很清晰。

select p.firstName, p.lastName, a.city, a.state
  from Person p left join Address a
  on p.personId = a.personId;

1581.进店却未进行过交易的顾客

输入:
Visits
+----------+-------------+
| visit_id | customer_id |
+----------+-------------+
| 1        | 23          |
| 2        | 9           |
| 4        | 30          |
| 5        | 54          |
| 6        | 96          |
| 7        | 54          |
| 8        | 54          |
+----------+-------------+
#该表包含有关光临过购物中心的顾客的信息
Transactions
+----------------+----------+--------+
| transaction_id | visit_id | amount |
+----------------+----------+--------+
| 2              | 5        | 310    |
| 3              | 5        | 300    |
| 9              | 5        | 200    |
| 12             | 1        | 910    |
| 13             | 2        | 970    |
+----------------+----------+--------+
#此表包含 visit_id 期间进行的交易的信息
输出:
+-------------+----------------+
| customer_id | count_no_trans |
+-------------+----------------+
| 54          | 2              |
| 30          | 1              |
| 96          | 1              |
+-------------+----------------+

有一些顾客可能光顾了购物中心但没有进行交易。请你编写一个 SQL 查询,来查找这些顾客的 ID ,以及他们只光顾不交易的次数。返回以任何顺序排序的结果表。
根据题意,我们只用找到不在 Transactions 中的 visit_id,然后统计相关 visit_id 对应 customer_id 的次数就行。

select customer_id, count(customer_id) as 'count_no_trans'
  from Visits where visit_id not in(
      select distinct visit_id from Transactions --这里也可以用 group by
  )
group by customer_id;

另外一种解法是将 Visits 与 Transactions 通过 visit_id 关联,统计 transaction_id 为 null 时对应 customer_id 的次数。

select v.customer_id, count(v.customer_id) as 'count_no_trans' 
  from Visits v left join Transactions t 
  on v.visit_id = t.visit_id 
  where transaction_id is null group by v.customer_id;

1148.文章浏览 I

Views 表:
+------------+-----------+-----------+------------+
| article_id | author_id | viewer_id | view_date  |
+------------+-----------+-----------+------------+
| 1          | 3         | 5         | 2019-08-01 |
| 1          | 3         | 6         | 2019-08-02 |
| 2          | 7         | 7         | 2019-08-01 |
| 2          | 7         | 6         | 2019-08-02 |
| 4          | 7         | 1         | 2019-07-22 |
| 3          | 4         | 4         | 2019-07-21 |
| 3          | 4         | 4         | 2019-07-21 |
+------------+-----------+-----------+------------+
#此表无主键,因此可能会存在重复行。
#此表的每一行都表示某人在某天浏览了某位作者的某篇文章。
#请注意,同一人的 author_id 和 viewer_id 是相同的。

结果表:
+------+
| id   |
+------+
| 4    |
| 7    |
+------+

直接根据题意条件翻译为SQL

select distinct author_id as 'id'
  from Views where author_id = viewer_id
  order by author_id

–明天又要上班了…
–当前播放歌曲 陈奕迅-《是但求其爱》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值