统计与聚合
统计查询
以下是
FUNCTION | DESCRIPTION |
---|---|
MAX | returns the largest (maximum) number in a sets |
MIN | described |
COUNT | returns a count of the # of values in a set |
COUNT DISTINCT | returns a count of the # of unique (distinct) values in a set |
EVERY | returns true if all data inside is true (same as bool_and) |
AVG | returns the average (mean) of the set of numbers |
SUM | returns the sum of all the values in the set |
以下示例使用
SELECT MAX(unit_price), MIN(unit_price), AVG(unit_price) FROM tracks;
MAX | MIN | AVG |
---|---|---|
1.99 | 0.99 | 1.0508050242649158 |
COUNT
原始数据的获取很不错,但是现在我们将开始实际进行一些汇总和转换! 我们将要学习的第一个也是最常用的聚合函数是
以下
SELECT COUNT(*) FROM albums;
不要使用count(*)
会统计值为
指定列
当COUNT(*)
总是会返回表中存在的行数的全部计数,因为*
)代表每一列,而且行中的所有列都不可能为
SELECT COUNT(composer) FROM tracks;
COUNT DISTINCT
带有
SELECT COUNT(DISTINCT composer) FROM tracks;
Aliases
这里有个简单的提示:请注意,上述数据集上的列标题并不清楚。
SELECT COUNT(*) AS "# of Tracks", COUNT(composer) AS "Non-Empty Composers", COUNT(*) - COUNT(composer) AS "Empty/Null Composers" FROM tracks;
GROUP BY
到目前为止,我们的汇总功能已遍及所有数据,但将汇总分为几组通常很有用。举例来说,我们不想获取所有曲目的计数,而是希望每种流派有多少曲目。这样做的一种方法是为每种类型编写一个单独的查询,如下所示:
SELECT COUNT(*) FROM tracks WHERE genre_id = 1;
SELECT COUNT(*) FROM tracks WHERE genre_id = 2;
SELECT COUNT(*) FROM tracks WHERE genre_id = 3;
.
.
.
SELECT COUNT(*) FROM tracks WHERE genre_id = n;
但是我们必须知道所有
SELECT genre_id, COUNT(*) FROM tracks GROUP BY genre_id;
在此按计数对查询结果进行排序很有用,这样我们就可以查看哪些作曲家产生的曲目数量最多(至少在我们的数据库中
SELECT composer, COUNT(*) as "count" FROM tracks GROUP BY composer ORDER BY "count" DESC;
Multiple GROUP BYs
您可以按多个对象进行分组,并且仅在第一组内部创建第二组。尝试运行以下示例,该示例首先按流派然后按作曲家分组。
SELECT genre_id, media_type_id, COUNT(*) FROM tracks GROUP BY genre_id, media_type_id ORDER BY genre_id, media_type_id;
组的优先级
SELECT media_type_id, genre_id, COUNT(*) FROM tracks GROUP BY media_type_id, genre_id ORDER BY media_type_id, genre_id;
注意,所有未列为