Mysql 选择成员总数和支付金额
我需要帮助为MySQL数据库生成SQL 我有三张桌子: 开办组织 成员 付款 组织表: 成员表: 付款表: 如何选择以下选项 应具有以下输出:Mysql 选择成员总数和支付金额,mysql,sql,Mysql,Sql,我需要帮助为MySQL数据库生成SQL 我有三张桌子: 开办组织 成员 付款 组织表: 成员表: 付款表: 如何选择以下选项 应具有以下输出: +------------+-------------------+--------+-----------------+---------------+--------------+ | Org name | Revenue |untransferred amount | Total members | last 3
+------------+-------------------+--------+-----------------+---------------+--------------+
| Org name | Revenue |untransferred amount | Total members | last 30 days |
+------------+-------------------+--------------------------+---------------+--------------+
| AAA | 150 | 0 | 3 | 2 |
|-----------------------------------------------------------+---------------+--------------+
| BBB | 200 | 200 | 1 | 0 |
+------------+-------------------+--------------------------+---------------+--------------+
Org name = organisation name
Revenue = Total amount received
untransferred amount = transferred_at is null (payments table)
Total members = total members joined till today
last 30 days = total members joined last 30 days
您需要联接表、对结果进行分组并选择所需的逻辑:
SELECT org.name,
SUM(pmt.amount) AS revenue,
SUM(IF(pmt.transferred_at IS NULL, pmt.amount, 0)) AS untransferred
FROM Organisations org
JOIN Members mem ON mem.organisation_id = org.id
JOIN Payments pmt ON pmt.member_id = mem.id
GROUP BY org.id
请继续观看。谢谢您的回答。我可以用php运行这个查询吗?谢谢。sumifjoin\u date>=curdate-间隔30天,1,0为最后一个\u 30\d此行是否给出错误?对不起,我是SQL新手。我可能遗漏了什么。忘记了一个妄想,trz now错误:“on子句”中的未知列“o.organization\u id”:选择o.name,sumamount作为收入,SumIFTransfered\u at为null,amount,0作为未转换的\u ammt,sumifjoin\u date>=curdate-间隔30天,1,0作为来自组织的最后一个\u 30 \u d o内部加入成员m on o.organization\u id=m.organization\u id内部加入付款p on p.member\u id=m.member\u id按1付款金额分组,0作为未转移的sumifjoin\u日期>=curdate-间隔30天,1,0作为组织的最后一个\u 30 \u d加入mem.organization上的成员mem\u id=org.id加入pmt上的付款pmt.member\u id=mem.id按org.id分组您的查询缺少逗号,因为untransferred>comma
+------------+-------------------+--------+-----------------+----------------+
| id | member_id |amount | transaction_id | transferred_at |
+------------+-------------------+--------+-----------------+----------------+
| 1 | 1 | 100 | T1001 | 2013-8-03 |
|-----------------------------------------+-----------------+--------------- +
| 2 | 2 | 0 | null | Null |
+------------+-------------------+--------+-----------------+----------------+
| 3 | 3 | 200 | T1002 | Null |
|-----------------------------------------+-----------------+----------------+
| 4 | 4 | 50 | T1005 | 2013-09-05 |
+------------+-------------------+--------+-----------------+----------------+
+------------+-------------------+--------+-----------------+---------------+--------------+
| Org name | Revenue |untransferred amount | Total members | last 30 days |
+------------+-------------------+--------------------------+---------------+--------------+
| AAA | 150 | 0 | 3 | 2 |
|-----------------------------------------------------------+---------------+--------------+
| BBB | 200 | 200 | 1 | 0 |
+------------+-------------------+--------------------------+---------------+--------------+
Org name = organisation name
Revenue = Total amount received
untransferred amount = transferred_at is null (payments table)
Total members = total members joined till today
last 30 days = total members joined last 30 days
SELECT org.name,
SUM(pmt.amount) AS revenue,
SUM(IF(pmt.transferred_at IS NULL, pmt.amount, 0)) AS untransferred
FROM Organisations org
JOIN Members mem ON mem.organisation_id = org.id
JOIN Payments pmt ON pmt.member_id = mem.id
GROUP BY org.id
select o.name,
sum(amount) as Revenue,
sum(if(transferred_at is null, amount, 0)) as untransfered_ammt,
sum(if(join_date>=curdate() - interval 30 day, 1, 0)) as last_30_d
from organisations o
inner join members m on o.id=m.organisation_id
inner join payments p on p.member_id=m.member_id
group by 1