SQL学习——聚合函数

Aggregate functions 聚合函数

从一组值计算单个结果集。

一.理论

1.COUNT

统计个数

SELECT COUNT(*)
FROM fake_apps
WHERE price=0;

2.SUM

SELECT SUM(downloads)
FROM fake_apps;

3.Max / Min

SELECT MAX(downloads)
FROM fake_apps;

SELECT MAX(price)
FROM fake_apps;

4.AVERAGE (AVG)

SELECT AVG(downloads)
FROM fake_apps;

SELECT AVG(price)
FROM fake_apps;

5.ROUND

取整

数字表示保留几位小数

SELECT ROUND(price, 0)
FROM fake_apps;

SELECT ROUND(AVG(PRICE),2)
FROM fake_apps;

6.GROUP BY

GROUP BY 总在 WHERE之后 ,ORDER BY 和 LIMIT 之前

SELECT AVG(imdb_rating)
FROM movies
WHERE year = 1999;

SELECT AVG(imdb_rating)
FROM movies
WHERE year = 2000;

SELECT AVG(imdb_rating)
FROM movies
WHERE year = 2001;

!可以写成
SELECT year,
   AVG(imdb_rating)
FROM movies
GROUP BY year
ORDER BY year;
!将每种类别的下载量计算
SELECT  category,SUM(downloads)
FROM fake_apps
GROUP BY category;

GROUP BY 使用数字表示按选中的第几列排布

SELECT category, 
   price,
   AVG(downloads)
FROM fake_apps
GROUP BY 1;

7.HAVING

与WHERE很像但是排序比较靠后

WHERE过滤行 HAVING过滤组

SELECT price, 
   ROUND(AVG(downloads)),
   COUNT(*) AS number
FROM fake_apps
GROUP BY price
HAVING number>10;

二.实战

将需要的显示的列写在select里

 

函数strftime(__, timestamp)

%Y 返回年份(YYYY)

%m 返回月份(01-12)

%d 返回当月的日期(1-31)

%H 返回24小时制(00-23)

%M 返回分钟(00-59)

%S 返回秒数(00-59)

SELECT strftime('%H', timestamp) AS 'Hour', 
   ROUND(AVG(score), 1) AS 'Average Score', 
   COUNT(*) AS 'Number of Stories'
FROM hacker_news
WHERE timestamp IS NOT NULL
GROUP BY 1
ORDER BY 2 DESC;

 

Database Schema

payments    2000 rows
idINTEGER
user_idINTEGER
amountREAL
statusTEXT
pay_dateTEXT
users   1000 rows
idINTEGER
first_nameTEXT
last_nameTEXT
emailTEXT
passwordTEXT
watch_history    2000 rows
idINTEGER
user_idINTEGER
watch_dateTEXT
watch_duration_in_minutesREAL

1.挑选最受欢迎的first_name 

SELECT first_name,COUNT(*) AS 'count'
FROM users
GROUP BY first_name
ORDER BY 2 DESC;

统计时间和次数

SELECT ROUND(watch_duration_in_minutes,0) AS 'duration',COUNT(*) AS 'count'
FROM watch_history
GROUP BY 1
ORDER BY 1 ASC;

 

3.统计成功消费客户

SELECT user_id,SUM(amount)
FROM payments
WHERE status='paid'
GROUP BY 1 
ORDER BY 2 DESC;

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值