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
id INTEGER
user_id INTEGER
amount REAL
status TEXT
pay_date TEXT
users   1000 rows
id INTEGER
first_name TEXT
last_name TEXT
email TEXT
password TEXT
watch_history    2000 rows
id INTEGER
user_id INTEGER
watch_date TEXT
watch_duration_in_minutes REAL

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;

猜你喜欢

转载自blog.csdn.net/yt627306293/article/details/84204749