Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 共2列_Mysql - Fatal编程技术网

Mysql 共2列

Mysql 共2列,mysql,Mysql,我试图改进我的查询,使它们能够工作,其结果是它们必须总计两列 这个查询是我需要的一个例子,结果RecargaronRetiraron是Recargaron+Retiraron的和 这是我得到的结果,它每天都有一个组,我想要这两列的总和在列总数中 这是我现在正在使用的查询,它可以工作,但我觉得它必须再次计算表中的数据,它只需要使用Sumracargaron+Retiraron 这只是查询的一部分,我现在有很多列和它们的总数,我认为如果有这样的方法,它应该工作得更快 可能的解决办法: 我为我的问题找

我试图改进我的查询,使它们能够工作,其结果是它们必须总计两列

这个查询是我需要的一个例子,结果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;