试着分享小白的SQL解题思路。
题意:该题需要列出【男生人数】及【男生的平均GPA】。
思路:比较容易想到应该是使用计数函数count/sum、avg。
误区:刚开始学习SQL的同学,比如我,会陷入一个误区,认为只要出现聚合函数,就联想到分组group by。但实际不是的,只要聚合函数不与常量列同时出现,是不需要group by语法的。
所以最简单的方法一,直接使用count函数和avg函数,就等轻松得到答案。
方法一:count函数、avg函数
selectcount(gender) male_num,avg(gpa) avg_gpafrom user_profilewhere gender <> 'female'
但有没有其他办法或函数能解呢,比如我就想练习一下case表达式,该如何解答呢。
方法二:case表达式、sum函数、count函数(纯粹为了练习其他函数的使用方法)
思路是,若gender=male,则计数1,否则计数0,然后把结果加和起来,就得到了male_num列;
avg_gpa列同样使用case表达式,若gender=male,则返回GPA值,否则返回null,然后利用avg函数求得男性平均GPA。
select
sum(
case when gender = 'male'
then 1
else 0 end) male_num,
avg(
case when gender = 'male'
then gpa
else null end) avg_gpa
from user_profile
where gender <> 'female'
方法三:
select
sum(
case when gender = 'male'
then 1
else 0 end) male_num,
sum(
case when gender = 'male'
then gpa
else 0 end)/count(gpa) avg_gpa
from user_profile
where gender <> 'female'