mysql - 如何将 2 个查询结果连接在一起?

标签 mysql sql

场景: 我有 2 个查询表单 1 个表,只想将两个查询结果作为单个查询结果查看。

详细信息: 表:loantrans

+-----+----------+---------+---------+---------+
| tid |   date   | account | purpose |    out  |
+-----+----------+---------+---------+---------+
|  1  |2014-08-12|   975   |  Loan   |   5000  |
|  2  |2014-08-12|   975   |Interest |   850   |
|  3  |2014-08-12|   975   |  Loan   |   150   |
|  4  |2014-08-12|   975   |Interest |   5000  |
+-----+----------+---------+---------+---------+

查询 1:

SELECT MONTH(`loantrans`.`date`) as month, SUM(`loantrans`.`out`) AS loanout
            FROM loantrans
            WHERE  (`loantrans`.`date` BETWEEN '2014-01-01' AND '2014-09-20')
            AND (`loantrans`.`purpose` = 'Loan')
            GROUP BY MONTH(`loantrans`.`date`)
            ORDER BY `loantrans`.`date`

结果:

+-------+---------+
| month | loanout |
+-------+---------+
|   1   |  28000  |
|   2   |  27000  |
|   3   |  10200  |
|   4   |  7000   |
|   5   |  95000  |
|   6   |  2000   |
+-------+---------+

查询 2:

SELECT MONTH(`loantrans`.`date`) as month, SUM(`loantrans`.`out`) AS intout
            FROM loantrans
            WHERE  (`loantrans`.`date` BETWEEN '2014-01-01' AND '2014-09-20')
            AND (`loantrans`.`purpose` = 'Interest')
            GROUP BY MONTH(`loantrans`.`date`)
            ORDER BY `loantrans`.`date`

结果:

+-------+---------+
| month |  intout |
+-------+---------+
|   1   |  2000   |
|   2   |  750    |
|   3   |  200    |
|   4   |  180    |
|   5   |  570    |
|   6   |  625    |
+-------+---------+

我想要的是这样的

+-------+---------+---------+
| month |  intout | loanout |
+-------+---------+---------+
|   1   |  2000   |  28000  |
|   2   |  750    |  27000  |
|   3   |  200    |  10200  |
|   4   |  180    |  7000   |
|   5   |  570    |  95000  |
|   6   |  625    |  2000   |
+-------+---------+---------+

如何得到这样的结果???

请查看此屏幕截图以更清楚地了解我在寻找什么 https://www.dropbox.com/s/dpptqb7y4c6xzi5/Capture3.PNG?dl=0 数据库: https://www.dropbox.com/s/8gbgrgvil915efr/bankdb.sql_7.zip?dl=0

最佳答案

  SELECT MONTH(lt.date) month, 
         SUM((lt.purpose='Interest')*lt.out) intout,
         SUM((lt.purpose='Loan')*lt.out) loanout
    FROM loantrans lt
   WHERE lt.date BETWEEN '2014-01-01' AND '2014-09-20'
  /* AND lt.purpose IN ('Interest', 'Loan') /* If you have more purposes. */  
GROUP BY month
ORDER BY month

关于mysql - 如何将 2 个查询结果连接在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25940927/

相关文章:

mysql - 返回第一个匹配行提高查询性能

Mysql - 插入只有一个自动递增列的表

javascript - 使用 HTML、CSS 和 JS 构建 Java 应用程序的 UI 设计

sql - 我可以计算 postgres 数组字段的出现次数吗?

php - 使用 GROUP BY 的 MySQL 查询和使用 ORDER BY 的子查询

mysql - VB.NET 连接到 MySQL 服务器数据库

php - XML 解析速度是否足以处理 i18n/l10n 和其他任务,或者我应该使用 MySQL?

javascript - 如何在mysql查询中精确找到选定对 Angular 线区域之间的数据

sql - 更新所有表行,但 Mysql 中的前 N

sql - 在 SELECT 语句中动态设置变量