SQL需要注意的note--case和聚合函数篇

本文介绍了SQL中使用count、sum、min、avg等聚合函数时应注意的事项,如忽略NULL值,以及sum的垂直加总特性。同时强调了min、max对数值和非数值的适用性,count与distinct的结合使用。还讨论了CASE语句在group by语句中的应用,如何通过CASE将行结构转换为列结构,并提醒在使用CASE时不要忘记定义ELSE分支以避免NULL。最后,通过经典例题解析了如何正确使用GROUP BY与聚合函数来处理数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

20190423更新:自己创建了函数查阅了经常犯的错误,要attention(在最后)

---------

count/sum/min/avg 等等聚合函数值作用非null,那些null自动忽略了

2.sum只垂直加总(除非。。)

3.min、max既可以作用非数值也可以作用数值

4.count(distinct)常常联用

5.case语句在group by里十分好用!

6. case技巧2sum+case行结构变成列结构

 

 

7.case如果省略else,默认其他情况都是null了,所以记得要加上

经典例题1:求求多列的最大数

思路1:

思路二

 

 经典例题2:

 

思路解析:groupby男女,之后我再select!!!!注意前后顺序

 

CREATE TABLE Poptbl2
(
pref_name        VARCHAR(50)    NOT NULL,
sex              INT            NOT NULL,
population       INT            NOT NULL
);


INSERT INTO Poptbl2 VALUES('德岛',1,60);
INSERT INTO Poptbl2 VALUES('德岛',2,40);
INSERT INTO Poptbl2 VALUES('香川',1,100);
INSERT INTO Poptbl2 VALUES('香川',2,100);
INSERT INTO Poptbl2 VALUES('爱媛',1,100);
INSERT INTO Poptbl2 VALUES('爱媛',2,50);
INSERT INTO Poptbl2 VALUES('高知',1,100);
INSERT INTO Poptbl2 VALUES('高知',2,100);
INSERT INTO Poptbl2 VALUES('福冈',1,100);
INSERT INTO Poptbl2 VALUES('福冈',2,200);
INSERT INTO Poptbl2 VALUES('佐贺',1,20);
INSERT INTO Poptbl2 VALUES('佐贺',2,80);
INSERT INTO Poptbl2 VALUES('长崎',1,125);
INSERT INTO Poptbl2 VALUES('长崎',2,125);
INSERT INTO Poptbl2 VALUES('东京',1,250);
INSERT INTO Poptbl2 VALUES('东京',2,150);

行列结构互换

-- 第一题 
SELECT pref_name,
       CASE WHEN sex = 1 THEN population ELSE NULL END AS '男',
       CASE WHEN sex = 2 THEN population ELSE NULL END AS '女'
  FROM Poptbl2;

 

不对

没有groupby这里德岛出现多次,因为就是选的每一行啊,所以groupby之后只出现一次,避免上面的问题 

SELECT pref_name,
       SUM(CASE WHEN sex = 1 THEN population ELSE NULL END) AS '男',
       SUM(CASE WHEN sex = 2 THEN population ELSE NULL END) AS '女'
  FROM Poptbl2
 GROUP BY pref_name;

但是聚合函数要加上,不加上的后果如下

SELECT pref_name,
       CASE WHEN sex = 1 THEN population ELSE NULL END AS '男',
       CASE WHEN sex = 2 THEN population ELSE NULL END AS '女'
  FROM Poptbl2
 GROUP BY pref_name;

第二题

SELECT sex AS '性别',
      SUM(population) AS '全国',
      SUM(CASE WHEN pref_name = '德岛' THEN population ELSE NULL END) AS '德岛',
      SUM(CASE WHEN pref_name = '香川' THEN population ELSE NULL END) AS '香川',
      SUM(CASE WHEN pref_name = '爱媛' THEN population ELSE NULL END) AS '爱媛',
      SUM(CASE WHEN pref_name = '高知' THEN population ELSE NULL END) AS '高知',

  FROM Poptbl2
 GROUP BY sex;

总结:看看先groupby哪一个 ,且要用聚合函数 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值