【高频SQL基础50题】16-20

day by day.

目录

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

2.项目员工 I 

3.销售分析III 

4. 判断三角形 

5. 电影评分

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

 

连接题。

思路:根据trans表中的visit_id号在 visits表中排除,再将剩下的合并相同客户(累加visit次数)后返回客户id即可。

左连接

原来左连接不需要手动调整,自动对齐,空位自动补null。

 

# Write your MySQL query statement below
SELECT customer_id,count(customer_id) count_no_trans
FROM Visits v
LEFT JOIN transactions t
ON v.visit_id=t.visit_id
WHERE transaction_id IS NULL
GROUP BY customer_id;

 

2.项目员工 I 

 

聚合函数题+左连接题.

使用avg函数

 

# Write your MySQL query statement below
SELECT project_id,ROUND(AVG(e.experience_years),2) AS average_years
FROM Project p 
LEFT JOIN Employee e
ON p.employee_id=e.employee_id
GROUP BY project_id;

 

3.销售分析III 

 

只需要去除重复但超出时间的售出商品即可。

在这个时间内售出的商品数量等于总商品数量。

 

# Write your MySQL query statement below
SELECT sales.product_id AS product_id,product.product_name AS product_name
FROM sales LEFT JOIN product 
ON sales.product_id=product.product_id
GROUP BY product_id
HAVING COUNT(sale_date BETWEEN '2019-01-01' AND '2019-03-31' OR NULL)=COUNT(*)

 

4. 判断三角形 

 

 

高级查询和连接题。

# Write your MySQL query statement below
SELECT x,y,z,
     CASE 
          WHEN x+y>z AND x+z>y AND y+z>x THEN 'Yes'
          ELSE 'No'
     END AS 'triangle'
FROM
     triangle
;

5. 电影评分

 

 

子查询题

# Write your MySQL query statement below
(SELECT u.name AS results
FROM Users u
LEFT JOIN MovieRating mr ON u.user_id=mr.user_id
GROUP BY u.user_id
ORDER BY COUNT(*) DESC,name ASC
LIMIT 1
)

UNION ALL

(SELECT title AS results
FROM Movies m
LEFT JOIN MovieRating mr 
ON m.movie_id=mr.movie_id AND YEAR(mr.created_at)=2020 AND MONTH(mr.created_at)=2
GROUP BY mr.movie_id
ORDER BY AVG(mr.rating) DESC,title
LIMIT 1
);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值