Datewhale Task03:复杂一点的查询

3.1
首先是创建视图的练习题,我一开始没有用展示数据库和使用数据库代码时,创建视图是失败的。百度一下才发现是没有提前用UES shop ,指明要用哪个数据库。而失败提示也是说没有发现数据库。这是我下次创建视图需要注意的。

SHOW databases;
USE shop;
CREATE VIEW ViewPractice5_1 (product_name,sale_price,regist_date)
AS 
SELECT product_name,sale_price,regist_date
FROM product
WHERE sale_price >= 1000 AND regist_date = '2009-09-20';

3.2
我得到的结果是这个:
Error Code: 1423. Field of view ‘shop.viewpractice5_1’ underlying table doesn’t have a default value
百度了一下,不知道怎么解决。可真是恼人呀。
3.3

SELECT product_name,product_type,sale_price,
(SELECT AVG(sale_price) 
FROM product) AS sale_price_all
FROM product;

顺利得出这道题的结果,哈哈。
3.4

CREATE VIEW AvgPriceByType 
AS
SELECT product_id,product_name,product_type,sale_price,
(SELECT AVG(sale_price)
FROM product) AS avg_sale_price
FROM product AS p1
WHERE sale_price = (SELECT AVG(sale_price)
FROM product AS p2
WHERE p1.product_type = p2.product_type
GROUP BY product_type);
SELECT * 
FROM AvgPriceByType;

出来的结果是这样的:
在这里插入图片描述也就是说错误了,没有符合这种条件的数据。这道题的难点不在于创建视图,也不在于关联子查询,而在于 avg(sale_price)这个字段是创建出来的,我不知道怎么在关联子查询中去描述创建出来的字段。等下看下答案是怎么写的吧。
练习题第二部分:
3.5
结果不全会变成NULL,因为根据真假表,当AND函数时,出现NULL 时,结果都会为NULL ,但是为OR函数时,但出现真值时,就会输出真值结果,但是如果是假值时,就输出NULL;
3.6
在这里插入图片描述
在这里插入图片描述
两张图片得到了完全不一样的结果,就是因为在not in 中添加了NULL,not in 的含义时指不选择括号内的相关数据。第一张图指价格不是500,800和5000的商品,而第二章图表示价格不是500,800,5000和null的商品;
3.7
这道题应该用CASE 表达式

SELECT COUNT( CASE WHEN sale_price < 1000  THEN sale_price ELSE 0 END ) as low_price,
count(CASE WHEN sale_price BETWEEN 1001 AND 3000 THEN sale_price ELSE 0 END) as mid_price,
count(CASE WHEN sale_price > 30001 THEN sale_price ELSE 0 END) as high_price
FROM product
WHERE purchase_price NOT IN (500,2800,5000);

结果:
在这里插入图片描述

出来的结果不一样呀,主要时我没看懂要查询的表是哪个呀。到时候看看答案就是知道是哪个表里。关于case 表达式的用法我应该是对的。
最后:
这几天的工作学习心得:这个周末都在加班,礼拜天下午结束加班,感觉不能连续加两天,否则要吐的。
下周估计又要连续加班,有时候想想加班是给自己积累经验,我就想想就好过一点了。
昨天吃了一个香肠,结果今天就上火了。下午在床上疼的想死。想起来我还有家里的葛粉可以泡,我泡了一大碗,果然清热去火,马上就不疼了。这里也推荐给大家这个好方法。
继续努力,一直努力,哪怕没有方向,没有目标。干着干着我就知道往哪走了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值