Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择成员总数和支付金额_Mysql_Sql - Fatal编程技术网

Mysql 选择成员总数和支付金额

Mysql 选择成员总数和支付金额,mysql,sql,Mysql,Sql,我需要帮助为MySQL数据库生成SQL 我有三张桌子: 开办组织 成员 付款 组织表: 成员表: 付款表: 如何选择以下选项 应具有以下输出: +------------+-------------------+--------+-----------------+---------------+--------------+ | Org name | Revenue |untransferred amount | Total members | last 3

我需要帮助为MySQL数据库生成SQL

我有三张桌子:

开办组织 成员 付款 组织表:

成员表:

付款表:

如何选择以下选项

应具有以下输出:

+------------+-------------------+--------+-----------------+---------------+--------------+ 
|  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=curdate
+------------+-------------------+--------+-----------------+----------------+
|    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