Mysql 共2列
我试图改进我的查询,使它们能够工作,其结果是它们必须总计两列 这个查询是我需要的一个例子,结果RecargaronRetiraron是Recargaron+Retiraron的和 这是我得到的结果,它每天都有一个组,我想要这两列的总和在列总数中 这是我现在正在使用的查询,它可以工作,但我觉得它必须再次计算表中的数据,它只需要使用Sumracargaron+Retiraron 这只是查询的一部分,我现在有很多列和它们的总数,我认为如果有这样的方法,它应该工作得更快 可能的解决办法: 我为我的问题找到了可能的解决办法。通过使用嵌套选择,我能够删除我在上一个查询中的第三个计数Mysql 共2列,mysql,Mysql,我试图改进我的查询,使它们能够工作,其结果是它们必须总计两列 这个查询是我需要的一个例子,结果RecargaronRetiraron是Recargaron+Retiraron的和 这是我得到的结果,它每天都有一个组,我想要这两列的总和在列总数中 这是我现在正在使用的查询,它可以工作,但我觉得它必须再次计算表中的数据,它只需要使用Sumracargaron+Retiraron 这只是查询的一部分,我现在有很多列和它们的总数,我认为如果有这样的方法,它应该工作得更快 可能的解决办法: 我为我的问题找
SELECT
res.fecha,
res.Recargaron,
res.Retiraron,
SUM(res.Recargaron + res.Retiraron) as RecargaronRetiraron
FROM
(SELECT
DATE_FORMAT(Fecha_Procesa, '%d-%m-%y') AS Fecha,
COUNT(DISTINCT(CASE WHEN Tipo=1 AND Status =1 THEN Usuario END )) AS Recargaron,
COUNT(DISTINCT(CASE WHEN Tipo=2 AND Status =1 THEN Usuario END )) AS Retiraron
FROM
transaccionesrr
WHERE
Fecha_Procesa BETWEEN '2018-12-01' AND '2018-12-22'
GROUP BY
DATE_FORMAT(Fecha_Procesa, '%d-%m-%y')
ORDER BY
Fecha_Procesa) AS res
GROUP BY
DATE_FORMAT(res.fecha, '%d-%m-%y');
时间上似乎有所改进,但不是我所期望的。您可以将SUMDISTINCT与条件聚合结合使用:
SELECT DATE_FORMAT(Fecha_Procesa, '%d-%m-%y') AS Fecha,
COUNT(DISTINCT(CASE WHEN Tipo=1 AND Status=1 THEN Usuario END)) AS Recargaron,
COUNT(DISTINCT(CASE WHEN Tipo=2 AND Status=1 THEN Usuario END)) AS Retiraron,
SUM(DISTINCT (CASE WHEN Tipo IN(1,2) AND Status=1 THEN Usuario END))
AS RecargaronRetiraron
FROM transaccionesrr
WHERE Fecha_Procesa BETWEEN '2018-12-01' AND '2018-12-22'
GROUP BY DATE_FORMAT(Fecha_Procesa, '%d-%m-%y')
ORDER BY Fecha_Procesa;
旁注:您还可以将条件Status=1直接移动到以下位置:
您的代码在这里缺少一个空格:当TipoIN但解决方案有效时+1@digijay谢谢你发现了。固定的:
SELECT
res.fecha,
res.Recargaron,
res.Retiraron,
SUM(res.Recargaron + res.Retiraron) as RecargaronRetiraron
FROM
(SELECT
DATE_FORMAT(Fecha_Procesa, '%d-%m-%y') AS Fecha,
COUNT(DISTINCT(CASE WHEN Tipo=1 AND Status =1 THEN Usuario END )) AS Recargaron,
COUNT(DISTINCT(CASE WHEN Tipo=2 AND Status =1 THEN Usuario END )) AS Retiraron
FROM
transaccionesrr
WHERE
Fecha_Procesa BETWEEN '2018-12-01' AND '2018-12-22'
GROUP BY
DATE_FORMAT(Fecha_Procesa, '%d-%m-%y')
ORDER BY
Fecha_Procesa) AS res
GROUP BY
DATE_FORMAT(res.fecha, '%d-%m-%y');
SELECT DATE_FORMAT(Fecha_Procesa, '%d-%m-%y') AS Fecha,
COUNT(DISTINCT(CASE WHEN Tipo=1 AND Status=1 THEN Usuario END)) AS Recargaron,
COUNT(DISTINCT(CASE WHEN Tipo=2 AND Status=1 THEN Usuario END)) AS Retiraron,
SUM(DISTINCT (CASE WHEN Tipo IN(1,2) AND Status=1 THEN Usuario END))
AS RecargaronRetiraron
FROM transaccionesrr
WHERE Fecha_Procesa BETWEEN '2018-12-01' AND '2018-12-22'
GROUP BY DATE_FORMAT(Fecha_Procesa, '%d-%m-%y')
ORDER BY Fecha_Procesa;
SELECT DATE_FORMAT(Fecha_Procesa, '%d-%m-%y') AS Fecha,
COUNT(DISTINCT(CASE WHEN Tipo=1 THEN Usuario END)) AS Recargaron,
COUNT(DISTINCT(CASE WHEN Tipo=2 THEN Usuario END)) AS Retiraron,
SUM(DISTINCT (CASE WHEN Tipo IN(1,2) THEN Usuario END)) AS RecagaronRetiraron
FROM transaccionesrr
WHERE Fecha_Procesa BETWEEN '2018-12-01' AND '2018-12-22'
AND Status = 1
GROUP BY DATE_FORMAT(Fecha_Procesa, '%d-%m-%y')
ORDER BY Fecha_Procesa;