mysql - 如何加入表格以返回每个团队符合特定条件的特定人数?

标签 mysql join sql-order-by

这是一个非常具体的:

我有两个表(t1t2)——t1 是我的所有人表,其中包含我数据库中的每个人以及所有他们的数据被存放,t2 是我的小得多的人员表,他们实际上将负责与 t1 中的人员交谈。

正如您在此示例中所看到的 SQL Fiddle t1 中的每个人都有分配给他们的特定标准(年龄、等级和团队)。我的最终结果希望是:对于 t2 中的每一位工作人员,查询将返回 t1 中的 2 个特定人员(如果他们的团队匹配)(这背后的想法是,我根据他们的团队将 t2 中的工作人员与他们将在 t1 中交谈的人员进行匹配。

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

  1. 仅返回年龄在 30 到 60 岁之间的 t1 人员(所有超出这些年龄范围的人都应被忽略)--
  2. 并且如果有两个以上符合上述条件的人,则首先返回评分最高的人。 (例如,如果一个团队中有四个人,而我们只需要两个人 - 因此查询应返回具有最佳评分的两个人,即接近 100 的评分。)

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

我希望所有团队的输出将类似于以下内容:

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.

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

最佳答案

SQL fiddle 不起作用。但仍然继续查询格式:)

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、性别 < AND "whatever"> 替换为您拥有的所有条件,例如“排名 > 10 ”等

关于mysql - 如何加入表格以返回每个团队符合特定条件的特定人数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26532774/

相关文章:

php - 将 PHP MYSQLI Select 应用于 Bootstrap 网格系统

mysql - 如何从创建虚拟列的表中获取不同的值 'types' - MySQL

MySQL 按日期排序然后按 id 排序

MySQL LIKE...结果优先排序

php - 为什么我的查询找到的是数字字段条目,而不是数字/字母组合

PHP MySQL 搜索建议

连接包含 Java HashMap 对象的 Kafka 流

c# - 使零出现在排序的整数列表中的最后

mysql - 插入 Base64Encoded 字符串返回不正确的字符串值 (MySQL)

MySQL 查询从多个表返回 OR-inclusive 关系