SQL 计算一列中的出现次数并计算另一列的总数

Posted

技术标签:

【中文标题】SQL 计算一列中的出现次数并计算另一列的总数【英文标题】:SQL Count occurrences in a column and calculate total of another 【发布时间】:2019-03-27 17:02:34 【问题描述】:

我有一个派生表,结果是这种格式:

    THENAME |    THESTATUS  | THECOST
    ----------------------------------        
      name1 |    statusX    | cost1.1
      name1 |    statusX    | cost1.2
      name2 |    statusZ    | cost2.1
      name2 |    statusZ    | cost2.1
      name3 |    statusY    | cost3.1
                   (...)
      nameN | status(X,Y,Z) | cost

每个 nameN 将始终具有相同的状态,但成本会有所不同。我试图想出一个看起来像这样的结果

Status Groups | Count of Names | Total Cost of Group
       X             2              10
       Y             5              20
       Z             4               5

基本上,显示每个状态的总成本和每个状态包含的项目数。

追求类似的东西

SELECT
     thestatus, 
     COUNT(DISTINCT thestatus),
     SUM(thecost)
FROM THETABLE
GROUP BY thestatus

不起作用,我正在考虑是否可以同时对两列进行分组..

编辑 - https://www.db-fiddle.com/f/bB1RSy8GV35FGEi3Lr1Tqw/0

编辑 - 不确定它是 mysql 的版本还是什么,但在示例数据中我认为它可以正常工作,但在实际查询中却没有。重新创建整个架构和整个查询是不可能的,但也许它是别的东西......

【问题讨论】:

statusX 的简单值是多少? THESTATUS 字符串的结构对于解决您的问题很重要。 statusX, statusY, statusZ 如果我正确理解了这个问题,这将是简单的值。该表源自具有多个连接的相当复杂的查询,它实际上并不存在于数据库中 您可以根据需要对任意数量的列进行分组。根据您的问题陈述,我认为您当前的查询没有任何问题。请编辑问题以添加一些示例数据和预期输出。见:meta.***.com/q/333952/2469308 检查:db-fiddle.com/f/bB1RSy8GV35FGEi3Lr1Tqw/5 【参考方案1】:

你可以像下面这样尝试,删除 distinct

SELECT
     THESTATUS, 
     COUNT(THENAME),
     SUM(THECOST)
FROM THETABLE
GROUP BY thestatus

demo

【讨论】:

它实际上产生了相同的结果。 @NikOs 你是怎么检查的?导致不同的名称计数和 cout(name) 不同 确实,在示例中它不会产生相同的结果,但在实际查询中会产生相同的结果 - 不知道如何。尽管如此,它会显示状态的总和,但我需要出现在结果中的名称数量。请看我创建的小提琴 @NikOs db-fiddle.com/f/bB1RSy8GV35FGEi3Lr1Tqw/2 是你预期的结果吗 @NikOs db-fiddle.com/f/bB1RSy8GV35FGEi3Lr1Tqw/4这是另一个你的预期结果?【参考方案2】:
SELECT 

DISTINCT THESTATUS as 'Status groups',

COUNT(THENAME) AS 'Count of Names', 

SUM(THECOST) as 'Total Cost of Group' 

FROM THETABLE GROUP BY THESTATUS 

【讨论】:

以上是关于SQL 计算一列中的出现次数并计算另一列的总数的主要内容,如果未能解决你的问题,请参考以下文章

根据另一列计算一列的出现次数

SQL - 计算一个列值在另一列中的出现

用于计算同一列的值百分比的 SQL [关闭]

在python中,我如何对一列中每个值与另一列中的值发生的次数(多少行)建立矩阵?

在另一列满足条件后计算一列中的值

根据第一列中的唯一值计算第二列中值的出现次数