SQL 统计一列中各字符串出现的次数并排序

在数据分析和数据库操作中,经常需要对某一列中的字符串进行统计分析。统计每个字符串出现的次数并按照出现次数进行排序,可以帮助我们更好地理解数据分布情况和发现重要的信息。本文将介绍如何使用 SQL 对一列中的字符串进行次数统计和排序。
示例数据
在开始之前,我们先来了解一下示例数据。假设我们有一张名为 orders 的数据表,包含了客户的订单信息。其中包含了一个名为 product 的列,记录了客户所购买商品的名称。
| order_id | customer_id | product |
|---|---|---|
| 1 | 1001 | Apple |
| 2 | 1003 | Orange |
| 3 | 1002 | Apple |
| 4 | 1003 | Banana |
| 5 | 1001 | Orange |
| 6 | 1002 | Banana |
我们的目标是对 product 列中的字符串进行统计和排序。
字符串出现次数统计
统计一列中字符串的出现次数可以使用聚合函数 COUNT() 和 GROUP BY 字句来实现。在本例中,我们使用 GROUP BY 对 product 列进行分组,然后使用 COUNT() 统计每个商品出现的次数。
SELECT product, COUNT(*) as count
FROM orders
GROUP BY product;
上述 SQL 查询语句将返回如下结果:
| product | count |
|---|---|
| Apple | 2 |
| Orange | 2 |
| Banana | 2 |
该结果列出了每个商品以及它们在 product 列中出现的次数。
次数排序
如果我们想按照商品出现的次数对结果进行排序,可以使用 ORDER BY 子句。默认情况下,ORDER BY 按照升序排列,如果想要降序排列,可以在列名后面加上 DESC 关键字。
SELECT product, COUNT(*) as count
FROM orders
GROUP BY product
ORDER BY count DESC;
上述 SQL 查询语句将返回如下结果:
| product | count |
|---|---|
| Apple | 2 |
| Orange | 2 |
| Banana | 2 |
结果按照商品出现的次数降序排列。
添加计数百分比列
除了统计次数,我们还可以计算每个商品出现次数的百分比。首先,我们需要计算总次数,然后使用聚合函数 SUM() 计算每个商品出现次数的百分比。
SELECT product, COUNT(*) as count, COUNT(*) * 100.0 / SUM(COUNT(*)) OVER() as percentage
FROM orders
GROUP BY product
ORDER BY count DESC;
上述 SQL 查询语句将返回如下结果:
| product | count | percentage |
|---|---|---|
| Apple | 2 | 33.3333 |
| Orange | 2 | 33.3333 |
| Banana | 2 | 33.3333 |
结果中的 percentage 列表示每个商品出现次数所占总次数的百分比。
筛选出现次数大于等于某个值的商品
有时候我们可能只关心出现次数大于等于某个特定值的商品。可以使用 HAVING 子句实现此目的。
SELECT product, COUNT(*) as count
FROM orders
GROUP BY product
HAVING COUNT(*) >= 2
ORDER BY count DESC;
上述 SQL 查询语句将返回如下结果:
| product | count |
|---|---|
| Apple | 2 |
| Orange | 2 |
| Banana | 2 |
结果列出了出现次数大于等于 2 次的商品。
结束语
本文介绍了如何使用 SQL 统计一列中各字符串出现的次数并排序。首先,我们使用 COUNT() 函数和 GROUP BY 子句统计每个字符串出现的次数;然后,使用 ORDER BY 子句按照次数进行排序;接着,我们添加了计数百分比列来展示每个字符串出现次数的百分比;最后,通过使用 HAVING 子句筛选出现次数大于等于某个特定值的字符串。
极客笔记