Mysql 带连接的复杂SQL

Mysql 带连接的复杂SQL,mysql,sql,Mysql,Sql,我在mysql中创建了这三个表。我很难创建一个查询,该查询将为我提供组织的列表,以及它们筹集的资金总额。资金将来自未经培训的学生和捐款人。任何帮助都将不胜感激 CREATE TABLE STUDENT ( StudentID INT PRIMARY KEY, StudentFirstName char(100) NOT NULL, StudentLastName char(100) NOT NULL, OrgID INT NOT NULL AmountRaised INT NOT NULL, C

我在mysql中创建了这三个表。我很难创建一个查询,该查询将为我提供组织的列表,以及它们筹集的资金总额。资金将来自未经培训的学生和捐款人。任何帮助都将不胜感激

CREATE TABLE STUDENT (
StudentID INT PRIMARY KEY,
StudentFirstName char(100) NOT NULL,
StudentLastName char(100) NOT NULL,
OrgID INT NOT NULL
AmountRaised INT NOT NULL,
Captain Char(3) Null,
);

CREATE TABLE ORGANIZATIONS(
OrgID INT PRIMARY KEY,
OrgName char(100) Not Null,
OrgCategory char(100) Not NULL,
AmountRaised int NOT NULL
);

CREATE TABLE KIDS (
KidId int PRIMARY KEY,
KidFirstName char(100) NOT NULL,
KidLastName char(100) NOT NULL,
OrgID INT NOT NULL,
);

CREATE TABLE DONORS(
DonorID int Primary Key,
DonorFirstName char(100) NOT NULL,
DonorLastName char(100) NOT NULL,
DonorOrganization char(100) NOT NULL,
AmountContributed int NOT NULL,
);

看起来应该是这样的:

SELECT id, sum(amount) FROM (
    (
        SELECT o.id as id, sum(d.AmountContributed) as amount
        FROM organizations o
        JOIN donors d ON d.donororganization = o.id
        GROUP BY o.id
    ) AS t
    UNION ALL
    (
        SELECT o.id as id, sum(s.AmountRaised) as amount
        FROM organizations o
        JOIN student s ON s.orgid = o.id
        GROUP BY o.id
    ) AS t
) as t
GROUP BY o.id;

我倾向于:

select orgid, sum(AmountRaised) as AmountRaised, sum(AmountDonated) as AmountDonated,
       (sum(AmountRaised) + sum(AmountDonated)) as total
from ((select s.orgid, AmountRaised, 0 as AmountDonated
       from student s
      ) union all
      (select d.orgid, 0 as AmountRaised, AmountDonated
       from donors d
      )
     ) o
group by orgid;

您可以使用附加的
join
来引入有关组织的附加数据。

使用一些示例数据编辑问题,期望得到的结果会有所帮助。另外,请告诉我们这些表之间的关系。如果不知道这一点,就无法真正编写连接查询。这里有语法错误,除非所有学生的名字都正好包含100个字符,否则Char(100)是非常浪费的。看看varcharSo你自己的查询到什么程度了?您到底被困在哪里了?缺少括号,每个派生表myst都有自己的别名。