Double count result when using INNER JOIN on TSQL(在 TSQL 上使用 INNER JOIN 时的双计数结果)
问题描述
我正在使用以下查询来计算所有脚本运行的次数,但是当一个软件有 2 种类型时,它会将计数结果加倍.
I'm using the following query to count all scripts runs, but when there are 2 types for a software, it doubles the count result.
这是我正在使用的查询:
Here is query I'm using:
SELECT
p.produto, p.pacote,
COUNT(p.produto) AS Execuções,
CONVERT(VARCHAR, AVG(DATEDIFF(SECOND, p.inicio, p.fim)) / 60) + ':' + RIGHT('0' + CONVERT(VARCHAR, AVG(DATEDIFF(SECOND, p.inicio, p.fim)) % 60), 2) AS [Tempo Médio (Automatizado)],
t.tempo_minutos AS [Tempo Médio (Manual)],
CONVERT(VARCHAR, (t.tempo_minutos * 60 - AVG(DATEDIFF(SECOND, p.inicio, p.fim))) / 60) + ':' + RIGHT('0' + CONVERT(VARCHAR, (t.tempo_minutos * 60 - AVG(DATEDIFF(SECOND, p.inicio, p.fim))) % 60), 2) AS [Economia Média],
CONVERT(VARCHAR, (t.tempo_minutos * 60 - AVG(DATEDIFF(SECOND, p.inicio, p.fim))) * COUNT(p.produto) / 60) + ':' + RIGHT('0' + CONVERT(VARCHAR, (t.tempo_minutos * 60 - AVG(DATEDIFF(SECOND, p.inicio, p.fim))) * COUNT(p.produto) % 60), 2) AS [Economia Total]
FROM
[log].pdq AS p
INNER JOIN
infra.tempo_medio_execucao AS t ON t.produto = p.produto
WHERE
(p.equipamento NOT LIKE 'XXX%') AND (p.status = 'Sucesso')
GROUP BY
p.produto, p.pacote, t.tempo_minutos
此查询返回以下结果(从表中删除了不必要的信息):
This query is returning the following result (removed the unnecessary info from the table):
produto | pacote | Execuções
---------+---------------+-----------
SafeSign | Desinstalação | 6
SafeSign | Instalação | 18
ScanBack | Instalação | 128
它应该返回的地方:
produto | pacote | Execuções
---------+---------------+-----------
SafeSign | Desinstalação | 3
SafeSign | Instalação | 9
ScanBack | Instalação | 128
在 infra.tempo_medio_execucao 表中,我有这个数据:
In the infra.tempo_medio_execucao table, I have this data:
produto | pacote | tempo_minutos
-------------+---------------+--------------
ScanBack | Instalação | 20
Siric Zero | Instalação | 20
GRRF | Instalação | 90
SICCH | Instalação | 15
Outlook 2013 | Instalação | 25
7-Zip | Instalação | 20
7-Zip | Desinstalação | 20
SafeSign | Instalação | 20
SafeSign | Desinstalação | 20
表 log.pdq 将返回:
The table log.pdq will return:
id | produto | pacote | inicio | fim | duracao | status
---+-----------+-------------+-------------------------+-------------------------+------------------+--------
1 | ScanBack | Instalação | 2018-09-18 11:22:54.000 | 2018-09-18 11:27:43.000 | 00:04:49.0000000 | Sucesso
2 | ScanBack | Instalação | 2018-09-18 12:10:46.000 | 2018-09-18 12:11:04.000 | 00:00:17.0000000 | Sucesso
3 | ScanBack | Instalação | 2018-09-18 12:10:49.000 | 2018-09-18 12:11:17.000 | 00:00:27.0000000 | Sucesso
4 | GRRF | Instalação | 2018-09-18 12:28:43.000 | 2018-09-18 12:29:14.000 | 00:00:30.0000000 | Sucesso
我创建的视图返回:(但对于 Safesign,它应该返回 3 和 9,而不是 6 和 18)
And the view I've created returns: (but for Safesign, it should return 3 and 9, not 6 and 18)
Produto | Pacote | Execuções | Tempo Médio (Automatizado) | Tempo Médio (Manual) | Economia Média | Economia Total
-----------+---------------+------------+----------------------------+----------------------+-----------------+----------------
GRRF | Instalação | 1 | 0:31 | 90 | 89:29 | 89:29
SafeSign | Desinstalação | 6 | 0:00 | 20 | 20:00 | 120:00
SafeSign | Instalação | 18 | 1:19 | 20 | 18:41 | 336:18
ScanBack | Instalação | 128 | 1:23 | 20 | 18:37 | 2382:56
SICCH | Instalação | 7 | 0:34 | 15 | 14:26 | 101:02
Siric Zero | Instalação | 208 | 0:33 | 20 | 19:27 | 4045:36
提前致谢!
推荐答案
我怀疑这符合您在问题中指定的内容:
I suspect that this does what you specify in the question:
SELECT p.produto, p.pacote,
COUNT(DISTINCT p.produto) AS Execuções,
. . .
你会从你的连接中得到重复——基本上是意外的匹配.
You would be getting duplicates from your joins -- basically unexpected matches.
但是,其他列也很可能(很可能)不准确.如果这解决了 Execuções
的问题,但您仍然有其他问题,请询问另一个问题.非常清楚示例数据、预期结果以及需要修复的内容.
However, it is quite possible (likely) that other columns are also inaccurate. If this fixes the issue with Execuções
, but you still have other issues, then ask another question. Be very clear about sample data, desired results, and what needs to be fixed.
这篇关于在 TSQL 上使用 INNER JOIN 时的双计数结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在 TSQL 上使用 INNER JOIN 时的双计数结果
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- SQL 临时表问题 2022-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 更改自动增量起始编号? 2021-01-01