2017-02-13 80 views
2

我想让我的报告更快,因为需要很长时间才能加载,我想知道是否有一种方法可以从一个选择中进行多次计数。MYSQL:从一个选择中进行多次计数

实例,使这个选择的愿望是不会改变的计数

SELECT IDS, Fecha_Recarga, Banco_Recarga, Tipo, Status, RefVerif, MontoVerif, RecargaDuplicada FROM transaccionesrr WHERE Fecha_Recarga = '2017-02-07' AND Banco_Recarga = 'BANESCO' AND Tipo = 'RECARGA' AND Status = 'PROCESADA' 

在此基础上选择的结果,我想打多计数像

Count (*) WHERE RefVerif = '1' AS RefVerif 
Count (*) WHERE RefVerif = '1' AND MontoVerif = '0' AS MontoVerif 
Count (*) WHERE RecargaDuplicada = '1' AS Duplicada 

这是存储过程,我有权知道

SELECT COUNT(*) AS RECARGAS, 

(SELECT COUNT(*) FROM transaccionesrr WHERE Tipo = 'RECARGA' AND Status = 'PROCESADA' AND Fecha_Recarga BETWEEN PRM_Fecha_Desde AND PRM_Fecha_Hasta AND Banco_Recarga = PRM_Banco AND RefVerif = '1') AS VERIFICADAS, 

(SELECT COUNT(*) FROM transaccionesrr WHERE Tipo = 'RECARGA' AND Status = 'PROCESADA' AND Fecha_Recarga BETWEEN PRM_Fecha_Desde AND PRM_Fecha_Hasta AND Banco_Recarga = PRM_Banco AND RefVerif = '0') AS NOVERIFICADAS, 

(SELECT COUNT(*) FROM transaccionesrr WHERE Tipo = 'RECARGA' AND Status = 'PROCESADA' AND Fecha_Recarga BETWEEN PRM_Fecha_Desde AND PRM_Fecha_Hasta AND Banco_Recarga = PRM_Banco AND RefVerif = '1' AND MontoVerif = '0') AS MONTOVERIF, 

(SELECT COUNT(*) FROM transaccionesrr WHERE Tipo = 'RECARGA' AND Status = 'PROCESADA' AND Fecha_Recarga BETWEEN PRM_Fecha_Desde AND PRM_Fecha_Hasta AND Banco_Recarga = PRM_Banco AND RecargaDuplicada = '1') AS DUPLICADAS 

FROM transaccionesrr WHERE Tipo = 'RECARGA' AND Status = 'PROCESADA' AND Fecha_Recarga BETWEEN PRM_Fecha_Desde AND PRM_Fecha_Hasta AND Banco_Recarga = PRM_Banco ; 

我试图做到这一点,因为我认为如果你认为有更好的方式我会很感激,它会更快。

我一直在努力使天的解决方案,但我没有找到任何

+0

我不知道很多有关SQL这一点,但我想查询会如果你将'RefVerif'存储为int而不是字符,那么速度会更快吗?所以你应该使用'RefVerif = 1'而不是使用单引号。 –

+0

我会尝试这个,谢谢 –

回答

1

使用条件汇总:

SELECT COUNT(*) AS RECARGAS, 
     SUM(RefVerif = '1') AS VERIFICADAS, 
     SUM(RefVerif = '0') AS NOVERIFICADAS, 
     SUM(RefVerif = '1' AND MontoVerif = '0') AS MONTOVERIF, 
     SUM(RecargaDuplicada = '1') AS DUPLICADAS 
FROM transaccionesrr 
WHERE Tipo = 'RECARGA' AND Status = 'PROCESADA' AND 
     Fecha_Recarga BETWEEN PRM_Fecha_Desde AND PRM_Fecha_Hasta AND 
     Banco_Recarga = PRM_Banco ; 
+0

谢谢戈登它完美的工作 –

+1

报告从18秒到3.5秒。谢谢 –

+1

它可能运行速度更快,并通过'(Tipo,Status,Banco_Recarga,Fecha_Recarga)'索引。 –