mysql - SELECT 用户订阅的多个值的总和

标签 mysql sql join

Table: assignments
=======================
|customerid |tariffid |
=======================
| 1     | 2           |
| 2     | 2           |
| 1     | 4           |
| 3     | 4           |
=======================

Table: cash
=======================
|customerid | value   |
=======================
| 1         | 2       |
| 1         | 9       |
| 1         | -15     |
| 2         | -9      |
| 2         | 2       |
| 2         | 2       |
| 2         | -9      |
| 3         | 9       |
=======================

Table: customers
=================================================
| id    | lastname| name | cutoffstop | deleted |
=================================================
| 1     | Doe     | John | 10     | 0           |
| 2     | Foo     | Jack | 10     | 0           |
| 3     | Zoo     | Jenny| 20     | 0           |
| 4     | Boo     | Jane | 5      | 0           |
=================================================

Table: tariffs
================
| id    | value|
================
| 1     | 0    |
| 2     | 2    |
| 3     | 0    |
| 4     | 9    |
================

我有四张 table 。另外,我有两个有效的查询,但我需要以某种方式合并这些查询。

第一个查询给了我一行 customerid(id) - Lastname - name - Balance[=sum(cash.value)]

SELECT customers.id AS id, UPPER(lastname) AS lastname, name, SUM(cash.value) AS balance
FROM customers
JOIN cash ON customers.id = cash.customerid
WHERE deleted = 0 AND cutoffstop < 50
GROUP BY customers.id, lastname, name
HAVING SUM(cash.value) < $limit
ORDER BY lastname, name

结果行第一个查询示例:

id  lastname    name    balance
1   DOE     John    -4 (=2+9+-15)

第二个查询给了我一行 customerid(id) - maxdept [=sum(tariffs.value)]

SELECT SUM(tariffs.value) AS maxdebt, customers.id AS id
FROM tariffs
INNER JOIN assignments ON tariffs.id = assignments.tariffid
INNER JOIN customers ON assignments.customerid = customers.id
GROUP BY id

第二个查询的结果行示例:

id  maxdept
1   11 (=9+2)

注意:maxdept = $limit

现在,我真正想要的是一个组合查询,其中第一个查询中的 $limit 是第二个查询的结果 查询 -> 每个 customerid 的关税.值 (=maxdept) 总和。 (现在 $limit 是在配置文件中静态定义的。)

提前致谢!

最佳答案

SELECT a.id, a.lastname, a.name, a.balance, b.maxdebt
FROM (SELECT customers.id AS id, UPPER(lastname) AS lastname, name, SUM(cash.value) AS balance
      FROM customers
      JOIN cash ON customers.id = cash.customerid
      WHERE deleted = 0 AND cutoffstop < 50
      GROUP BY customers.id, lastname, name) a
INNER JOIN (SELECT SUM(tariffs.value) AS maxdebt, customers.id AS id
            FROM tariffs
            INNER JOIN assignments ON tariffs.id = assignments.tariffid
            INNER JOIN customers ON assignments.customerid = customers.id
            GROUP BY id ) b ON a.id = b.id and a.balance < b.maxdebt

关于mysql - SELECT 用户订阅的多个值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19423807/

相关文章:

mysql - DataStax sqoop 从 MySQL 导入到 Cassandra - 无法访问导入的数据

c# - 导出选定的行和列 datagridview

php - PDO - 在 'while' 循环中获取 Assoc

mysql - 获取嵌套 SQL 查询中一列的平均值

mysql - 当我尝试通过连接从多个表中删除时出现 SQL 语法错误

mysql - 如果在表中找不到数据字段,则返回值 0 或 0.00 - MySql

mysql - 使用 Aulux Barcode 软件连接到 MySQL 数据库

SQL在Groovy中执行不等到它完成才返回

php - sql连接问题

sql - 生成唯一的字母数字 ID