使用两个group by和一个select语句

时间:2012-08-06 09:15:11

标签: mysql select group-by

我有两张桌子

  1. 包含列ID,年,月的日期
  2. 包含列ID,金额,类型,收入,工具的交易
  3. 类型只能是借方或贷方,而工具可以是任何方法,如信用卡等。

    我需要的是获得一个查询,其中选择年份,月份,类型,工具以及按类型和工具分组的“金额”总和以及按年和月分组的收入总和。

    我可以使用两个不同的查询来获取值

    示例:

    获得按年和月分组的收入总和:

      select sum(T.income) as total
        from transaction as T, date as D
       where D.id = T.id
    group by D.month, D.year)
    

    获得其他价值观:

      select D.year, D.month,
             T.type, T.instrument, sum(T.amount) as sumAmount,T.income
        from date as D, transaction as T 
       where D.id=T.id,
    group by T.instrument, T.type
    

    但我需要通过一个查询来完成它。有没有其他方法来检索此数据集?是否可以在同一个select语句中以两种方式使用group by?

1 个答案:

答案 0 :(得分:3)

这是你要找的人吗?

SELECT tableA.ID, tableA.`Year`, tableA.`Month`,  
       tableA.`Type`, tableA.instrument, 
       tableA.totalAmount, tableB.totalInstrument
FROM
(
    SELECT  a.ID, a.`Year`, a.`Month`, 
            b.`Type`, b.instrument, 
            SUM(b.`amount`) totalAmount
    FROM    `date` a
                INNER JOIN `transactions` b
                    ON a.ID = b.id
    GROUP BY b.`Type
) tableA
INNER JOIN
(
    SELECT  a.ID, a.`Year`, a.`Month`, 
            b.`Type`, b.instrument, 
            SUM(b.`instrument`) totalInstrument
    FROM    `date` a
                INNER JOIN `transactions` b
                    ON a.ID = b.id
    GROUP BY a.`Year`, a.`Month`
) tableB ON tableA.ID = tableB.ID AND
            tableA.`Year` = tableB.`Year` AND
            tableA.`Month` = tableB.`Month`
第一个子查询是通过获取金额的总和第二个子查询获得工具的总和。他们的结果将被连接起来,以便连续获得totalAmount和totalInstrument。