SUM和GROUP BY不同的列

时间:2017-11-12 01:50:09

标签: mysql

我需要按不同的列对总和进行分组:

Banco_Recarga的SUM1组

BancoRetiro的SUM2小组

SELECT Banco_Recarga, BancoRetiro, bancos_recargas.banco, 
SUM(CASE WHEN Tipo='1' AND (Status = '1' OR Status = '2') THEN '1' ELSE 0 END)  AS SUM1,
SUM(CASE WHEN Tipo='2' AND (Status = '1' OR Status = '2') THEN '1' ELSE 0 END)  AS SUM2
FROM transaccionesrr 
INNER JOIN bancos_recargas ON (transaccionesrr.Banco_Recarga = bancos_recargas.id)
WHERE Fecha_Recarga BETWEEN '2017-11-01' AND '2017-11-10' GROUP BY Banco_Recarga ORDER BY SUM1;

我一直在找几个小时,但我找不到解决方案

1 个答案:

答案 0 :(得分:1)

试试这个:

  SELECT
        CASE
           WHEN Tipo = '1' AND (Status = '1' OR Status = '2') THEN Banco_Recarga
           WHEN Tipo = '2' AND (Status = '1' OR Status = '2') THEN BancoRetiro
           ELSE 'Unexpected'
        END AS banco
      , SUM(CASE WHEN Tipo = '1' AND (Status = '1' OR Status = '2') THEN '1' ELSE 0 END) AS sum1
      , SUM(CASE WHEN Tipo = '2' AND (Status = '1' OR Status = '2') THEN '1' ELSE 0 END) AS sum2
  FROM transaccionesrr
  INNER JOIN bancos_recargas ON (transaccionesrr.Banco_Recarga = bancos_recargas.id)
  WHERE Fecha_Recarga BETWEEN '2017-11-01' AND '2017-11-10'
  GROUP BY
        CASE
           WHEN Tipo = '1' AND (Status = '1' OR Status = '2') THEN Banco_Recarga
           WHEN Tipo = '2' AND (Status = '1' OR Status = '2') THEN BancoRetiro
           ELSE 'Unexpected'
        END
  ORDER BY sum1, sum2

您可能需要在where子句中添加条件。