1

我已经看到了大量关于“如何加入两个以上的表”的线程,但这些线程似乎都没有解决我的问题。我有三个表 teamspersonspayfiles

teams表如下所示:

DROP TABLE IF EXISTS `teams`;
CREATE TABLE IF NOT EXISTS `teams` (
 `team_id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(20) DEFAULT NULL,
 `leader` varchar(32) NOT NULL,
  PRIMARY KEY (`team_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=30;`

persons桌子:

DROP TABLE IF EXISTS `persons`;
CREATE TABLE IF NOT EXISTS `persons` (
  `team_id` int(2) DEFAULT '0',
  `hash` varchar(32) NOT NULL,
  UNIQUE KEY `hash` (`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

payfiles桌子:

DROP TABLE IF EXISTS `payfiles`;
CREATE TABLE IF NOT EXISTS `payfiles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `hash` varchar(32) NOT NULL,
  `deals_passed` int(2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1298 ;

表格有更多的列,但为了简单起见,我对它们进行了修剪。

teams表包含以下方式的记录: 1, Team 1,afaf7878af78a 后者是团队负责人的唯一哈希。

表 person 包含所有个人信息和一个唯一的哈希值,例如 John Doe,其哈希值afaf7878af78a也是团队 1 的领导者。

该表payfile还有一个“哈希”列,该表包含计算员工支票所需的所有信息。

管理团队希望对公司的收入有一个总体了解。他们想看看每支球队带来了多少钱。

我在这里面临的问题是试图按“团队”对收入进行分组

到目前为止我最好的尝试是这个

SELECT hash, SUM(deals_passed) as deals FROM payfiles JOIN persons ON persons.hash = payfiles.hash GROUP BY payfiles.hash

但是我看不到查询数据库的优化方法,以便在不改变数据库结构的情况下按团队生成一个团队的总体收益愿景。

例如:John Doe 和 Jane Doe 属于“Team 1”,他们分别带来了 500 美元和 600 美元。

我想生成类似的东西:

“第 1 队带来了 1100 美元”

我的替代方法是更改​​数据库的结构,并在 payfile 表中添加一个新列。这样的列是team_id这样我可以很容易地查询它,但数据库目前有大约 10,000 条记录,这意味着更新不考虑team_id列的 10K 记录,并对 GUI 进行大量更改,我没有真的很想做,虽然如果这是最简单和最好的选择,我会做的。

谢谢!

4

2 回答 2

1
SELECT
    teams.name,
    SUM(payfiles.deals_passed) AS team_deals_passed
FROM payfiles
LEFT JOIN persons USING (hash)
LEFT JOIN teams USING (team_id)
GROUP BY teams.team_id
于 2012-07-18T16:06:15.550 回答
0

您可以使用 SUM() 获取总数,并使用 GROUP BY 为团队获取每个团队的总数。

于 2012-07-18T16:00:49.523 回答