如何加入表格以返回每个团队符合特定标准的特定人数?

Posted

技术标签:

【中文标题】如何加入表格以返回每个团队符合特定标准的特定人数?【英文标题】:How Do I Join Tables to Return a Specific Number of People Per Team Who Fit Certain Criteria? 【发布时间】:2014-12-19 09:32:35 【问题描述】:

这是一个非常具体的:

我有两个表(t1t2)——t1 是我的全员表,其中存放了我数据库中的每个人及其所有数据,t2 是我的小得多的表真正要与t1 中的人交谈的人。

正如您在此示例 SQL Fiddle 中所见,t1 中的每个人都有分配给他们的特定条件(年龄、评级和团队)。我的最终结果希望是:对于t2 中的每个工人,如果他们的团队匹配,查询将返回来自t12 个特定的人(这背后的想法是我匹配t2 中的工作人员与他们将在 t1 中交谈的人基于他们的团队)。

但更棘手的是,我还希望查询满足另外两组条件:

    仅返回来自t1 的年龄在 30 到 60 岁之间的人(应忽略这些年龄范围之外的所有人)-- 并且如果有两个以上的人符合上述条件,则首先返回评分最高的人。 (例如,如果团队中有四个人,而我们只需要两个人 - 所以查询应该返回评分最高的两个人,这将是接近 100 的评分。)

最后一件让我难以理解的事情是,每个团队也有多个工人——因此,如果“团队 A”中有两个 t2 工人,则查询应该返回四个不同的 t1 人在 A 组中:两个附属于一个工人,两个附属于另一个(就像我上面所说的,他们应该是四个评价最高的人[尽管两个人去哪个工人并不重要)。

对于所有团队,我希望的输出将如下所示:

ID (t1)   Person (t1)   Team (t1)   Worker (t2)
539184    Smith, Jane   Team A      Smith, Bob
539186    Smith, Jim    Team A      Smith, Bob
537141    Smith, Danny  Team A      Smith, Bill
537162    Smith, James  Team A      Smith, Bill
Etc.

实际上,我正在用成千上万条记录做类似的事情——这就是为什么这是我能想到的唯一方法,但我什至不知道从哪里开始。任何帮助将不胜感激,我将添加任何有用的其他信息!

【问题讨论】:

【参考方案1】:

SQL 小提琴不起作用。但仍然继续使用查询格式:)

SET @rank:=1, @curr =  0;    

SELECT * FROM(
SELECT @rank := if(@curr = t1.id,  @rank+1, 1 ) as rank,@curr := t1.id as curr, <field_list>
FROM t1
INNER JOIN t2 on t1.id = t2.ref_id
WHERE t2.age BETWEEN 30 AND 60 < AND "whatever">
ORDER BY t1.id, t2.ranking desc
) t WHERE rank <= 2 ;

替换为您要选择的字段,例如姓名、ID、性别 替换为您拥有的所有条件,例如 "ranking > 10" 等

【讨论】:

这是一个更新的 SQL fiddle (sqlfiddle.com/#!2/eda85/7),我试图让您的查询工作。我删除了“”,因为我不知道它在做什么,以及“”,并修复了一些 t1/t2 交换。现在在小提琴中编写代码的方式返回零记录,但它没有给出错误。部分问题可能是您在各自的 ID 上加入了 t1t2 - 但来自 t2 的工作人员可能不一定在 t1 人员表中。还有其他想法吗?谢谢! 感谢您的编辑,但这似乎仍然不起作用——如果您有机会在上面的评论中跳入 SQL Fiddle 并回击一些东西,那就太好了. 请尝试理解查询。你如何关联这两个表? t1.id=t2.id 不匹配任何内容。查询逻辑没有问题,自己做必要的修改。当我加入“t1.LastName = t2.LastName”时,它会给出输出 我假设团队中会有某种 JOIN,因为这是两个表共享的内容。查询本质上应该通过 t2 查看每个团队中有多少人,然后根据此返回来自 t1 的最好的两个人。

以上是关于如何加入表格以返回每个团队符合特定标准的特定人数?的主要内容,如果未能解决你的问题,请参考以下文章

Maximo/Oracle SQL 语句从连接表中返回不需要的数据

如何过滤特定地点的受访者人数?错误:FUN(左,右)错误:

UITableView 拉取每个用户的特定请求

了解喜欢两个特定Facebook页面的人数?

如何在多个条件上加入,返回两个条件的所有组合

如何在 VBA 中创建一个函数以返回与记录集中每条记录的特定条件匹配的列名?