SQL 在多个列和行上计算特定值的数量

SQL 在多个列和行上计算特定值的数量

在本文中,我们将介绍如何使用 SQL 在多个列和行上计算特定值的数量。我们将使用以下示例说明。

假设我们有一个名为”orders”的表,该表包含了顾客订单的信息,如下所示:

订单ID 顾客ID 产品1 产品2 产品3
1 1001 Apple Banana Pear
2 1002 Orange Grape Mango
3 1003 Apple Banana Mango
4 1004 Orange Banana Pear
5 1005 Apple Grape Pear

现在我们想计算每个产品的出现次数。我们可以使用 COUNT 函数和条件来实现。

阅读更多:SQL 教程

计算每个产品的出现次数

水平计算

要计算每个产品的出现次数,我们可以使用 COUNT 函数和 GROUP BY 子句对每个产品进行分组计数。以下是相应的 SQL 查询:

SELECT 产品1, COUNT(产品1) AS 数量
FROM orders
GROUP BY 产品1;
SQL

这将返回以下结果:

产品1 数量
Apple 3
Orange 2

同样,我们可以针对其他产品列进行相同的计算,以获取它们的出现次数。

垂直计算

除了在行上计算产品的出现次数,我们还可以在列上计算。为此,我们可以将产品列转换为行,并在新的列中计算出现次数。

以下是相应的 SQL 查询:

SELECT 产品, SUM(Apple) AS Apple数量, SUM(Orange) AS Orange数量, SUM(Banana) AS Banana数量, SUM(Grape) AS Grape数量, SUM(Pear) AS Pear数量, SUM(Mango) AS Mango数量
FROM (
  SELECT 产品1 AS 产品,
         CASE WHEN 产品1 = 'Apple' THEN 1 ELSE 0 END AS Apple,
         CASE WHEN 产品1 = 'Orange' THEN 1 ELSE 0 END AS Orange,
         CASE WHEN 产品1 = 'Banana' THEN 1 ELSE 0 END AS Banana,
         CASE WHEN 产品1 = 'Grape' THEN 1 ELSE 0 END AS Grape,
         CASE WHEN 产品1 = 'Pear' THEN 1 ELSE 0 END AS Pear,
         CASE WHEN 产品1 = 'Mango' THEN 1 ELSE 0 END AS Mango
  FROM orders

  UNION ALL

  SELECT 产品2 AS 产品,
         CASE WHEN 产品2 = 'Apple' THEN 1 ELSE 0 END AS Apple,
         CASE WHEN 产品2 = 'Orange' THEN 1 ELSE 0 END AS Orange,
         CASE WHEN 产品2 = 'Banana' THEN 1 ELSE 0 END AS Banana,
         CASE WHEN 产品2 = 'Grape' THEN 1 ELSE 0 END AS Grape,
         CASE WHEN 产品2 = 'Pear' THEN 1 ELSE 0 END AS Pear,
         CASE WHEN 产品2 = 'Mango' THEN 1 ELSE 0 END AS Mango
  FROM orders

  UNION ALL

  SELECT 产品3 AS 产品,
         CASE WHEN 产品3 = 'Apple' THEN 1 ELSE 0 END AS Apple,
         CASE WHEN 产品3 = 'Orange' THEN 1 ELSE 0 END AS Orange,
         CASE WHEN 产品3 = 'Banana' THEN 1 ELSE 0 END AS Banana,
         CASE WHEN 产品3 = 'Grape' THEN 1 ELSE 0 END AS Grape,
         CASE WHEN 产品3 = 'Pear' THEN 1 ELSE 0 END AS Pear,
         CASE WHEN 产品3 = 'Mango' THEN 1 ELSE 0 END AS Mango
  FROM orders
) AS t
GROUP BY 产品;
SQL

这将返回以下结果:

产品 Apple数量 Orange数量 Banana数量 Grape数量 Pear数量 Mango数量
Apple 3 0 1 1 2 1
Banana 2 1 3 0 2 0
Grape 1 2 0 2 1 1
Mango 1 1 1 1 0 2
Orange 0 2 1 0 0 0
Pear 2 0 1 1 3 0

总结

通过使用 SQL 的 COUNT 函数和条件,我们可以轻松地计算多个列和行上特定值的数量。水平计算使用 GROUP BY 子句在行上进行计数,垂直计算则转换列为行,并在新的列中计数。这些技术在数据分析和报告中都非常有用。希望本文能够帮助您理解如何在多个列和行上计算特定值的数量。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册