具有多个表和关系的复杂 SQL 查询

2024-02-08

在此查询中,我必须列出为完全相同的球队效力的一对球员及其球员 ID 和球员姓名。如果一名球员为 3 支球队效力,则另一个球员必须为完全相同的 3 支球队效力。不多也不少。如果两名球员目前没有为任何球队效力,他们也应该被包括在内。查询应返回 (playerID1,playername1,playerID2,playerName2),不重复,例如如果玩家 1 的信息出现在玩家 2 之前,则不应有另一个包含玩家 2 信息的元组出现在玩家 1 之前。

例如,如果球员 A 为洋基队和红袜队效力,而球员 B 为洋基队、红袜队和道奇队效力,我不应该得到他们。他们都必须为洋基队和红袜队效力,而不是其他球队。现在,如果球员为任何同一支球队效力,则此查询会找到答案。

Tables:
player(playerID: integer, playerName: string)
team(teamID: integer, teamName: string, sport: string)
plays(playerID: integer, teamID: integer)

Example data:
PLAYER    
playerID    playerName
1           Rondo
2           Allen
3           Pierce
4           Garnett
5           Perkins

TEAM      
teamID     teamName       sport
1          Celtics        Basketball
2          Lakers         Basketball
3          Patriots       Football
4          Red Sox        Baseball
5          Bulls          Basketball

PLAYS
playerID    TeamID
1           1
1           2
1           3
2           1
2           3
3           1
3           3

所以我应该得到这个作为答案-

 2, Allen, 3, Pierce 
 4, Garnett, 5, Perkins

.

2、阿伦、3 皮尔斯是一个答案,因为两人都只为凯尔特人队和爱国者队效力。 4、加内特、5、帕金斯是一个答案,因为这两名球员都没有效力于任何应该输出的球队。

现在我的查询是

SELECT p1.PLAYERID, 
       f1.PLAYERNAME, 
       p2.PLAYERID, 
       f2.PLAYERNAME 
FROM   PLAYER f1, 
       PLAYER f2, 
       PLAYS p1 
       FULL OUTER JOIN PLAYS p2 
                    ON p1.PLAYERID < p2.PLAYERID 
                       AND p1.TEAMID = p2.TEAMID 
GROUP  BY p1.PLAYERID, 
          f1.PLAYERID, 
          p2.PLAYERID, 
          f2.PLAYERID 
HAVING Count(p1.PLAYERID) = Count(*) 
       AND Count(p2.PLAYERID) = Count(*) 
       AND p1.PLAYERID = f1.PLAYERID 
       AND p2.PLAYERID = f2.PLAYERID; 

我不是 100% 确定,但我认为这会找到为同一支球队效力的球员,但我想找出为同一支球队效力的球员,如上所述

此后我陷入了如何处理它的困境。有关如何解决此问题的任何提示。谢谢你的时间。


我相信这个查询会做你想要的:

SELECT array_agg(players), player_teams
FROM (
  SELECT DISTINCT t1.t1player AS players, t1.player_teams
  FROM (
    SELECT
      p.playerid AS t1id,
      concat(p.playerid,':', p.playername, ' ') AS t1player,
      array_agg(pl.teamid ORDER BY pl.teamid) AS player_teams
    FROM player p
    LEFT JOIN plays pl ON p.playerid = pl.playerid
    GROUP BY p.playerid, p.playername
  ) t1
INNER JOIN (
  SELECT
    p.playerid AS t2id,
    array_agg(pl.teamid ORDER BY pl.teamid) AS player_teams
  FROM player p
  LEFT JOIN plays pl ON p.playerid = pl.playerid
  GROUP BY p.playerid, p.playername
) t2 ON t1.player_teams=t2.player_teams AND t1.t1id <> t2.t2id
) innerQuery
GROUP BY player_teams
Result:
PLAYERS               PLAYER_TEAMS
2:Allen,3:Pierce      1,3
4:Garnett,5:Perkins

它使用 array_agg 代替每个玩家的 teamidplays匹配具有完全相同团队配置的玩家。例如,我在团队中包含了一列,但只要不从 group by 子句中删除它,就可以将其删除而不影响结果。

SQL 小提琴示例。 http://sqlfiddle.com/#!12/2fb1b4/18/0使用 Postgresql 9.2.4 进行测试

编辑:修复了重复行的错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有多个表和关系的复杂 SQL 查询 的相关文章

随机推荐

  • UIImageView内容模式

    蓝线是图像视图的边界 UIImageView s contentMode is UIViewContentModeScaleAspectFit 我想保持原始图片的比例 怎样才能让图片的左边缘在UIImageView的左边缘 但不喜欢UIVi
  • Android 上的 PhoneGap 不会加载外部脚本

    我正在制作一个简单的应用程序来加载谷歌地图 但问题是每次我加载这个 它无法在我的 Android 模拟器上运行 而在桌面上则可以正常运行 如何让 Phonegap 或 Android 允许外部脚本工作 加载 更新 我总是收到此错误 应用程序
  • 我无法在 Android 真实手机上获取位置

    public class LocationService extends Service private Handler mHandler new Handler private Timer mTimer null private int
  • 有 typeid 可供参考吗?

    我正在寻找一种获取类型名称的方法 类似于typeid但仅供参考 根据这一页 http en cppreference com w cpp language typeid typeid删除引用 如果 type 是引用类型 则结果引用引用的类型
  • 在 C# 中生成运行哈希(或校验和)?

    Preface 我正在执行具有验证提交阶段的数据导入 这个想法是 第一阶段允许从各种来源获取数据 然后在数据库上运行各种插入 更新 验证操作 提交被回滚 但会生成 验证哈希 校验和 提交阶段是相同的 但是 如果 验证哈希 校验和 相同 则将
  • 使用 tfds.load() 无法访问 CelebA 数据集

    我正在尝试在深度学习项目中使用 CelebA 数据集 我有来自 Kaggle 的压缩文件夹 我想解压缩 然后将图像拆分为训练 测试和验证 但后来发现这在我的设备上是不可能的不那么强大 system 因此 为了避免浪费时间 我想使用 Tens
  • 为什么安装opencv后缺少cv2.so?

    今天我将opencv 2 4 4安装到Ubuntu 12 10 但是 import cv2 不起作用 root python Python 2 7 3 default Sep 26 2012 21 53 58 GCC 4 7 2 on li
  • Hello-jni 示例在 Android Studio 2.0 预览版中不起作用

    我正在尝试实施hello jni sample https github com googlesamples android ndk tree master hello jni进入我的项目 我有Gradle2 8 和 com android
  • 切换按钮折叠在 Bootstrap 导航栏中不起作用

    当导航栏折叠时 我的切换按钮不起作用 我已经检查了数据目标几次 看起来没问题 这是我的代码 div class navbar navbar fixed top navbar inverse div class container div d
  • REST API:请求正文为 JSON 或纯 POST 数据?

    我目前正在构建一个 REST API 当前所有 GET 方法都使用 JSON 作为响应格式 POST 和 PUT 操作的最佳实践是什么 在请求正文中使用 JSON 还是纯 POST 我找不到任何关于此事的信息 例如 我看到 Twitter
  • 使用 appcfg.py 时出现意外的关键字参数“context”

    我尝试通过 appcfg py 更新 Google App Engine 上的项目 C gt C Program Files x86 Google google appengine appcfg py update c secondApp
  • 单击时按钮周围出现不需要的轮廓或边框

    我的网站上有一个样式按钮 但是当我单击它时 它会创建一个不需要的边框或轮廓 我不知道是哪个 我怎样才能删除那个边框 以下是与该按钮相关的所有代码 button border hidden cursor pointer outline non
  • UIGraphicsGetImageFromCurrentImageContext() - 内存泄漏

    我正在打开相机UIImagePickerControllerSourceTypeCamera和一个习惯cameraOverlayView这样我就可以拍摄多张照片 而无需 使用照片 步骤 这很好用 但是保存照片功能存在内存泄漏 通过大量的调试
  • 建设 DAL。使用 EDM(来自数据库)

    我必须开发一个在 Windows wpf 中工作的 lob 应用程序 但应该以两种方式部署 使用本地数据库 同一台计算机 具有远程数据库 在同一网络中 我将使用从数据库生成的实体数据模型 dbcontext EF 4 0 VS2012 sq
  • NSURLConnection 返回错误而不是 401 响应

    我有一个 Web API 对于特定请求 如果一切正常 则返回状态代码 200 如果用户未根据授权令牌登录 则返回 401 如果响应状态为 200 则一切正常 但如果响应状态为 401 则似乎无法正常工作 返回代码为 1012 的连接错误 而
  • 使用指向非常量指针和指向相同地址的常量参数的指针的函数调用

    我想编写一个函数 输入一个数据数组并使用指针输出另一个数据数组 我想知道如果两者都结果是什么src and dst指向相同的地址 因为我知道编译器可以针对 const 进行优化 这是未定义的行为吗 我标记了 C 和 C 因为我不确定它们之间
  • 为什么 ProcessPoolExecutor 一直运行

    我尝试使用Python进程池执行器要计算一些 FFT 并行 请参见以下代码 import concurrent futures import numpy as np from scipy fft import fft def fuc sig
  • Shopify:如何处理卸载然后立即重新安装?

    我最近遇到过这样的情况 用户卸载了我的 Shopify 应用程序并立即重新安装 这导致了一个问题 因为我将所有用户存储在数据库表中 登录 安装工作如下 用户告诉我他的商店网址 我将用户转发至 example myshopify com ad
  • JavaScript 中的 .trim() 在 IE 中不起作用

    我尝试申请 trim https developer mozilla org en JavaScript Reference Global Objects String trim到我的一个 JavaScript 程序中的一个字符串 它在 M
  • 具有多个表和关系的复杂 SQL 查询

    在此查询中 我必须列出为完全相同的球队效力的一对球员及其球员 ID 和球员姓名 如果一名球员为 3 支球队效力 则另一个球员必须为完全相同的 3 支球队效力 不多也不少 如果两名球员目前没有为任何球队效力 他们也应该被包括在内 查询应返回