如何获取每个工具的第一个女性,Oracle数据库

6 浏览
0 Comments

如何获取每个工具的第一个女性,Oracle数据库

我正在编写Oracle查询,但遇到了以下问题

表格结构如下:

Tool       Name       Gender
Facebook   Alice        F
Facebook   Alex         M
Facebook   Loong        M
Facebook   Jimmy        M
Twitter    James        M
Twitter    Jessica      F
Twitter    Sam          M
Twitter    Kathrine     F
Google     Rosa         F
Google     Lily         F
Google     Bob          M

我想要得到每个工具中的第一个女性

结果应该如下:

Facebook   Alice
Twitter    Jessica
Google     Rosa

我想要使用查询而不是函数或过程来实现这个目标

谢谢帮助

0
0 Comments

问题出现的原因是需要从每个工具中获取第一个女性。解决方法是使用Oracle数据库中的窗口函数和子查询别名来实现。下面是代码的解释和示例:

代码中的子查询部分首先根据工具名称和姓名对数据进行排序,并使用窗口函数row_number()给每个记录分配一个行号(rn)。然后,在子查询的结果中,只选择行号为1的记录(即每个工具中的第一个女性)。

解决方法的示例可以在SQL Fiddle中查看,链接如下:Example at SQL Fiddle.

0
0 Comments

问题出现的原因:用户想要找到每个工具的第一个女性,但是现有的解决方案可能存在一些问题,如无法选择除姓名之外的其他列。

解决方法:用户提供了另一种解决方案,并提出了一些讨论点,询问哪种方法更好,以及它们之间的区别。用户还指出了现有解决方案可能在选择其他列时存在问题。

文章整理如下:

在Oracle数据库中,我们想要找到每个工具的第一个女性。下面是一个解决方案的示例代码:

select min(name), tool
from yourTable
where gender = 'F'
group by tool

用户提供了另一种解决方案,并提出了一些讨论点。用户说这是他第一次看到row_number()函数。用户注意到他的解决方案按字母顺序返回女性,而现有的解决方案通过在窗口中排序来实现相同的效果。用户询问两种方法之间的区别是什么。

另一个用户回答说,现有的解决方案只能在不需要选择姓名之外的其他列时才能正常工作。例如,如果需要返回名字和姓氏,min函数可能会选择一个人的名字和另一个人的姓氏。

因此,用户提供的解决方案可能更适合在需要选择多个列时使用。然而,对于仅需要选择姓名的情况,现有的解决方案也是有效的。

根据具体的需求和选择的列,我们可以选择适合的解决方案来找到每个工具的第一个女性。

0