如何加入表格以返回每个团队符合特定标准的特定人数?
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 【问题描述】:这是一个非常具体的:
我有两个表(t1
和 t2
)——t1
是我的全员表,其中存放了我数据库中的每个人及其所有数据,t2
是我的小得多的表真正要与t1
中的人交谈的人。
正如您在此示例 SQL Fiddle 中所见,t1
中的每个人都有分配给他们的特定条件(年龄、评级和团队)。我的最终结果希望是:对于t2
中的每个工人,如果他们的团队匹配,查询将返回来自t1
的2 个特定的人(这背后的想法是我匹配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
- 但来自 t2
的工作人员可能不一定在 t1
人员表中。还有其他想法吗?谢谢!t2
查看每个团队中有多少人,然后根据此返回来自 t1
的最好的两个人。以上是关于如何加入表格以返回每个团队符合特定标准的特定人数?的主要内容,如果未能解决你的问题,请参考以下文章