我正在使用以下查询来统计所有脚本的运行,但是当一种软件有两种类型时(“批注”列),它会使计数结果加倍。
SELECT
p.produto, p.pacote, COUNT(p.produto) AS Execuções, t.tempo_minutos AS [Tempo Médio (Manual)]
FROM
[log].pdq AS p
INNER JOIN
infra.tempo_medio_execucao AS t ON t.produto = p.produto
WHERE
(p.status IS NOT NULL) AND (p.status = 'Sucesso') AND (p.produto = 'SafeSign')
GROUP BY
p.produto, p.pacote, t.tempo_minutos
此查询返回以下结果:
╔══════════╦═══════════════╦═══════════╦══════════════════════╗
║ produto ║ pacote ║ Execuções ║ Tempo Médio (Manual) ║
╠══════════╬═══════════════╬═══════════╬══════════════════════╣
║ SafeSign ║ Desinstalação ║ 6 ║ 20 ║
║ SafeSign ║ Instalação ║ 18 ║ 20 ║
╚══════════╩═══════════════╩═══════════╩══════════════════════╝
但是,如果我删除了代码的INNER JOIN部分,它将返回所需的计数值。但是我的查询需要一个带有infra.tempo_medio_execucao表的INNER JOIN。
SELECT
p.produto, p.pacote, COUNT(p.produto) AS Execuções
FROM
[log].pdq AS p
WHERE
(p.status IS NOT NULL) AND (p.status = 'Sucesso') AND (p.produto = 'SafeSign')
GROUP BY
p.produto, p.pacote
此新查询将产生以下结果(这是执行INNER JOIN查询时的预期结果):
╔══════════╦═══════════════╦═══════════╗
║ produto ║ pacote ║ Execuções ║
╠══════════╬═══════════════╬═══════════╣
║ SafeSign ║ Desinstalação ║ 3 ║
║ SafeSign ║ Instalação ║ 9 ║
╚══════════╩═══════════════╩═══════════╝
以下是与此查询相关的表中的一些其他信息:
来自infra.tempo_medio_execucao的数据:
╔══════════╦═══════════════╦═══════════════╗
║ produto ║ pacote ║ tempo_minutos ║
╠══════════╬═══════════════╬═══════════════╣
║ SafeSign ║ Instalação ║ 20 ║
║ SafeSign ║ Desinstalação ║ 20 ║
╚══════════╩═══════════════╩═══════════════╝
log.pdq中的数据:
╔══════════╦═══════════════╦═════════════════════════╦═════════════════════════╦══════════════════╦═════════╗
║ produto ║ pacote ║ inicio ║ fim ║ duracao ║ status ║
╠══════════╬═══════════════╬═════════════════════════╬═════════════════════════╬══════════════════╬═════════╣
║ SafeSign ║ Instalação ║ 2018-11-09 13:06:00.000 ║ 2018-11-09 13:07:29.000 ║ 00:01:28.0000000 ║ Sucesso ║
║ SafeSign ║ Desinstalação ║ 2018-11-09 13:21:19.000 ║ 2018-11-09 13:21:20.000 ║ 00:00:00.0000000 ║ Sucesso ║
║ SafeSign ║ Instalação ║ 2018-11-09 13:27:52.000 ║ 2018-11-09 13:28:55.000 ║ 00:01:03.0000000 ║ Sucesso ║
║ SafeSign ║ Instalação ║ 2018-11-09 13:34:08.000 ║ 2018-11-09 13:34:58.000 ║ 00:00:50.0000000 ║ Sucesso ║
║ SafeSign ║ Desinstalação ║ 2018-11-09 13:38:19.000 ║ 2018-11-09 13:38:19.000 ║ 00:00:00.0000000 ║ Sucesso ║
║ SafeSign ║ Desinstalação ║ 2018-11-09 14:04:34.000 ║ 2018-11-09 14:04:35.000 ║ 00:00:00.0000000 ║ Sucesso ║
║ SafeSign ║ Instalação ║ 2018-11-09 14:09:41.000 ║ 2018-11-09 14:10:15.000 ║ 00:00:33.0000000 ║ Sucesso ║
║ SafeSign ║ Instalação ║ 2018-11-09 14:09:57.000 ║ 2018-11-09 14:11:49.000 ║ 00:01:52.0000000 ║ Sucesso ║
║ SafeSign ║ Instalação ║ 2018-11-09 13:17:01.000 ║ 2018-11-09 13:19:37.000 ║ 00:02:36.0000000 ║ Sucesso ║
║ SafeSign ║ Instalação ║ 2018-11-09 13:17:01.000 ║ 2018-11-09 13:17:44.000 ║ 00:00:42.0000000 ║ Sucesso ║
║ SafeSign ║ Instalação ║ 2018-11-09 14:28:16.000 ║ 2018-11-09 14:30:32.000 ║ 00:02:15.0000000 ║ Sucesso ║
║ SafeSign ║ Instalação ║ 2018-11-09 15:30:34.000 ║ 2018-11-09 15:31:06.000 ║ 00:00:32.0000000 ║ Sucesso ║
╚══════════╩═══════════════╩═════════════════════════╩═════════════════════════╩══════════════════╩═════════╝
根据log.pdq表,有12个条目。 Desinstalação中有3位,Instalação中有9位。
由于某些原因,当使用计数产品而不使用INNER JOIN函数时,它将返回正确的计数。但是当使用它时,它将使结果加倍。
我已经问过这个问题,但是格式和信息质量很差。因此,无法回答。然后,随着更好的解释,数据,格式的出现,这个问题在几分钟之内就浮出水面。
首先感谢所有。
答案 0 :(得分:2)
您可能需要在pacote
条件中包含JOIN
字段:
infra.tempo_medio_execucao AS t ON t.produto = p.produto AND t.pacote = p.pacote
在没有这种条件的情况下,每行都与tempo_medio_execucao表中的两行相乘,从而创建重复行。