在我的数据库模式中,我有俱乐部、球队和球员,我想创建一个报告,统计俱乐部中的球队总数,以及没有球员的球队数量。输出如下:
CLUB #TEAMS #EMPTYTEAMS
Cobras 5 0
Eagles 7 2
我的架构在以下伪代码中进行了描述:
TABLE CLUB
ID int
NAME string
TABLE TEAM
ID int
NAME string
TABLE PLAYER
ID int
NAME string
TABLE CLUB_TEAM
ID int
CLUB_ID int -- foreign key into CLUB
TEAM_ID int -- foreign key into TEAM
TABLE MEMBERSHIP
ID int
PLAYER_ID int -- foreign key into PLAYER
TEAM_ID int -- foreign key into TEAM
一些示例数据:
CLUB
0 Eagles
1 Cobras
TEAM
0 Eagles U10
1 Eagles U11
2 Eagles U12
...
7 Cobras U11
8 Cobras U12
9 Cobras U13
...
PLAYER
0 John Doe
1 Jane Doe
...
CLUB_TEAM
0 0 0 - The Eagles Club has an U10 team
1 0 1
2 0 2
...
7 1 7
8 1 8
9 1 9
MEMBERSHIP
0 0 7 - John plays for Cobras U11
1 1 9 - His older sister, Jane, plays for Cobras U13
我已经成功开发了一个查询,它将给出每个俱乐部的球队数量:
SELECT CLUB.ID, CLUB.NAME, COUNT(CLUB_TEAM.ID) AS "#TEAMS"
FROM CLUB
INNER JOIN CLUB_TEAM
ON CLUB_TEAM.CLUB_ID = CLUB.ID
INNER JOIN TEAM
ON CLUB_TEAM.TEAM_ID = TEAM.ID
GROUP BY CLUB.ID
然而,我还不能将这个查询扩展到包括球队成员数据和没有球员的球队。有什么建议吗?
也许这会有所帮助。由于没有示例数据,我无法对其进行测试,因此很可能存在语法错误(或两个!),但希望您能理解这个想法。基本上,您将成员资格表汇总为有一行给出每个团队的成员计数,然后将其留给原始查询。当团队没有成员时,COALESCE 处理这种情况,因此在左连接上返回一个 NULL 值,该值被转换为零。我相信PostgreSQL支持常见的表表达式(即我在这里使用的WITH子句),这在当今的SQL数据库中是非常标准的。
WITH team_membership AS (
SELECT team_id, COUNT(*) AS membercount
FROM membership
)
SELECT club.id,
club.name,
COUNT(club_team.id) AS "#TEAMS",
SUM(CASE WHEN COALESCE(membercount, 0) = 0 THEN 1 ELSE 0 END) AS "#EMPTYTEAMS"
FROM club
INNER JOIN club_team
ON club_team.club_id = club.id
INNER JOIN team
ON club_team.team_id = team.id
LEFT JOIN team_membership
ON club_team.team_id = team_membership.team_id
GROUP BY club.id,
club.name
我设法找到了如何追踪空团队,我的解决方案类似于@user9601310的第二部分。
SELECT CLUB.ID, CLUB.NAME, COUNT(MEMBERSHIP.TEAM_ID) AS "#MEMBERS"
FROM CLUB
INNER JOIN CLUB_TEAM
ON CLUB_TEAM.CLUB_ID = CLUB.ID
INNER JOIN TEAM
ON CLUB_TEAM.TEAM_ID = TEAM.ID
LEFT JOIN MEMBERSHIP -- LEFT JOIN to capture teams with no members
ON MEMBERSHIP.TEAM_ID = TEAM.ID
GROUP BY CLUB.ID, TEAM.ID
HAVING COUNT(MEMBERSHIP.TEAM_ID) = 0
从那里,我用以下方式包装了这个查询(…):
SELECT CLUB.ID, COUNT(#MEMBERS) AS "#EMPTYTEAMS"
FROM ( ... ) AS "QUERY"
GROUP BY CLUB.ID
这给了我每个俱乐部的空队数量。
然后,基于这个问题中的想法,我以如下方式组合了我的两个查询——上面的一个和问题中的一个:
SELECT SET1.ID, CLUB.NAME, "#TEAMS", "#EMPTYTEAMS"
FROM ( query 1 ) SET1
INNER JOIN ( query 2 ) SET2
ON SET1.ID = SET2.ID
这给了我想要的结果。不太优雅,但是内心的疑问相当直截了当,它们的组合也是如此。
问题内容: 在寻找Java库以数据库不可知的方式构建查询时,我遇到了许多信息,包括iciql,querydsl,jooq,joist,hibernate等。 我想要一些不需要配置文件并且可以使用动态架构的东西。对于我的应用程序,我在运行时了解数据库和架构,因此我没有架构的任何配置文件或域类。 这似乎是querydsl的核心目标之一,但仔细阅读querydsl的文档,我看到了很多使用域类构建动态查询
PM给我们提了个需求,是快速做一个查询工具(web app) 预设几种查询的数据集(配好join之类的关联) 然后可以在前端页面上直接设置查询条件,导出结果表单 要求就是不花很多功夫(因为只是一个小工具),配好数据集之后就能用 可以自定义查询条件和输出的字段 因为数据量比较大,不能直接查出结果之后写filter过滤 想问下有没有这种简单好用的框架
操作步骤: ①登录账号进入工作台 ②选择团队设置查看团队成员。 提示: ●团队管理员可以进行新建地图、删除地图、创建地图副本等操作。 ●在团队设置中可以查找成员、邀请成员以及更换成员权限和移除成员。 ●团队至少要有一个管理员。 操作动图: [查看原图]
问题内容: 根据MSDN,返回已执行查询的列元数据。我想知道是否有类似的方法将为给定查询提供表元数据?我的意思是涉及哪些表以及它具有什么别名。 在我的应用程序中,我得到了查询,并且需要以编程方式附加该子句。使用,我可以获取列元数据及其所属的表。但是,即使表具有别名,它仍然会返回真实的表名。有没有办法获取该表的别名? 以下代码显示如何获取列元数据。 这将为我正确提供列的详细信息。但是当我看到列时,它
这是我命令的代码部分!虽然只有这一部分我不能很好地理解!我正试图让机器人在队列结束后离开! 它说和工作只是让机器人离开语音通道是我无法解决的问题!我尝试了以下方法: 编辑:
问题内容: 我正在一个Swift操场上玩,正在上一堂新课。由于某种原因,我不断收到这样的错误:类“没有成员类型”,其名称的常量前面定义了三行。这是代码: Xcode Beta6一直在倒数第二行给我一个错误,说“ DataModel.Type没有名为’myCalendar’的成员 尽管我认为这不会有所作为,但我尝试将myCalendar定义为var。 问题答案: 您无法初始化引用同一类的另一个实例属