【问题标题】:How to Sum a series of rows in MYSQL from one Table, matching the info from another to get the result如何从一个表中对 MYSQL 中的一系列行求和,匹配另一个表中的信息以获得结果
【发布时间】:2013-03-20 21:51:12
【问题描述】:
SELECT table2.*, 
       (SELECT Sum(qtde) 
        FROM   table1 
        WHERE  table1.cnes = table2.cnes 
               AND table1.procedimento = table2.procedimento 
               AND table1.mes = table2.mes 
               AND table1.ano = table2.ano 
        GROUP  BY cnes, 
                  procedimento, 
                  ano, 
                  mes) AS soma 
FROM   table2 

此代码在 Access 中运行良好。

我有两张桌子。

Table1 有以下列:CNES, PROCEDIMENTO, MES, ANO, QTDE

它可能包含这样的信息(我无法改变这个事实,我从另一个软件获取信息)

+------+--------------+-----+-----+------+
| CNES | PROCEDIMENTO | MES | ANO | QTDE |
+------+--------------+-----+-----+------+
| C1   | P1           | M1  | A1  |   12 |
| C1   | P1           | M1  | A1  |    3 |
| C1   | P1           | M1  | A1  |    5 |
| C1   | P2           | M1  | A1  |    4 |
| C1   | P2           | M1  | A1  |    4 |
| C1   | P2           | M1  | A1  |    3 |
| C1   | P3           | M1  | A1  |    4 |
| C2   | P2           | M1  | A1  |    5 |
| C2   | P2           | M1  | A1  |    4 |
| C2   | P1           | M1  | A1  |    3 |
+------+--------------+-----+-----+------+

QTDE = 来自医院 (CNES) 一个月 (MES) 和一年 (ANO) 完成的手术数量 (PROCEDIMENTO)

所以要知道从一家医院到一个月的手术数量,我需要搜索所有行并将该月的所有行求和...

Table2 有以下列:CNES, PROCEDIMENTO, NOME, MES, ANO, META

此表包含医院在一个月内需要执行的程序数量(META)和程序的实际名称(NOME.PROCEDIMENTO 是一个数字,但我将其存储为字符串 [code])

所以我在 Access 中工作的查询将从上面的示例中执行此操作

查询1

+------+--------------+------+-----+-----+------+------------+
| CNES | PROCEDIMENTO | NOME | MES | ANO | META | SUM(QTDE)  |
+------+--------------+------+-----+-----+------+------------+
| C1   | P1           | N1   | M1  | A1  |   23 |         20 |
| C1   | P2           | N2   | M1  | A1  |   20 |         11 |
| C1   | P3           | N3   | M1  | A1  |   04 |          4 |
| C2   | P2           | N2   | M1  | A1  |   05 |          9 |
| C2   | P1           | N1   | M1  | A1  |   01 |          3 |
+------+--------------+------+-----+-----+------+------------+

如果您仔细观察,您会发现最后一列是该月的数量总和,因此我可以使用它来查看医院是否完成了该月应该进行的手术数量。

除此之外,我的查询没有这样做,但我希望它这样做......我需要另一列来显示 % (SUM(QTDE)/META)。但我需要将超过 100% 的 %% 设为仅 100%……而且我需要小心除以零问题……

【问题讨论】:

  • 您的问题是什么?你有什么问题?而且,您使用的是哪个数据库,Access 还是 MySQL?
  • 我想要 MySQL 的代码我只在 Acess 中工作的查询

标签: mysql sql group-by sum


【解决方案1】:

我认为这在 MySQL 5.5.30 中运行良好:

select *, 
 if(meta = 0 or soma > meta, 100, (soma/meta)*100) Percent
from
(
 SELECT table2.*, 
   (SELECT Sum(qtde) 
    FROM   table1 
    WHERE  table1.cnes = table2.cnes 
           AND table1.procedimento = table2.procedimento 
           AND table1.mes = table2.mes 
           AND table1.ano = table2.ano 
    GROUP  BY cnes, 
              procedimento, 
              ano, 
              mes) AS soma
FROM   table2) TMP;

【讨论】:

  • 所以,我也需要修复原始代码,以便在 MySQL 中使用它。因为在 MySQL 中,代码只是在“SOMA”列上返回 NULL
  • 您的原始查询运行良好。你可以在这里看到它:sqlfiddle.com/#!2/1c148/9
  • 非常感谢您的帮助。但我不知道为什么在 Workbench 不断向我返回 NULL...我怎么知道发生了什么以及为什么?
  • 可能您的数据包含 NULL 或任何导致错误行为的值。
  • 如果我运行这个查询 SELECT Sum(producao.qtde) FROM producao GROUP BY producao.cnes, producao.procedimento, producao.ano, producao.mes 值返回恰到好处。无论如何,我可以“观看”从主查询中识别问题的过程?
猜你喜欢
  • 2015-04-13
  • 1970-01-01
  • 2020-03-09
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多