当前位置: 首页 > 面试题库 >

获得每个组的最佳结果(在Oracle中)

严言
2023-03-14
问题内容

我如何能够在oracle查询中为几个组获得N个结果。

例如,给定下表:

|--------+------------+------------|
| emp_id | name       | occupation |
|--------+------------+------------|
|      1 | John Smith | Accountant |
|      2 | Jane Doe   | Engineer   |
|      3 | Jack Black | Funnyman   |
|--------+------------+------------|

有更多行和更多职业。我想从每个职业中聘请三名员工(可以说)。

有没有不用子查询就可以做到这一点的方法?


问题答案:

这将产生所需的内容,并且不使用供应商特定的SQL功能(例如TOP N或RANK())。

SELECT MAX(e.name) AS name, MAX(e.occupation) AS occupation 
FROM emp e 
  LEFT OUTER JOIN emp e2 
    ON (e.occupation = e2.occupation AND e.emp_id <= e2.emp_id) 
GROUP BY e.emp_id 
HAVING COUNT(*) <= 3 
ORDER BY occupation;

在此示例中,它为三位雇员提供每个职业emp_id最低的值。您可以更改不等式比较中使用的属性,以使其按名称或其他方式赋予高层雇员。



 类似资料:
  • 问题内容: 我有ID为的商品。现在我有如下数据。每行都有一个offerId。由数组中的组合组成。是那个的价值 现在,我必须选择所有给我提供最佳ID组合(即最大总折扣)的offerId。 例如,在上述情况下:可能的结果可能是: [o2,o4,o5]最大折扣为。 注意。结果offerId应该不会重复ID。id的示例为[1,3,4],[5],[6]都是不同的。 其他组合可以是: 其id为[1],[3,5

  • 问题内容: 假设我有这样的pandas DataFrame: 我想获得一个新的DataFrame,其中每个ID的前2个记录如下: 我可以对分组依据中的记录进行编号: 但是,有没有更有效/更优雅的方法来做到这一点?还有一种更优雅的方法来对每个组中的数字进行记录(例如SQL窗口函数row_number())。 问题答案: 你试过了吗 Ouput生成: (请记住,根据数据,你可能需要先进行订购/排序)

  • 问题内容: 当分页来自数据库的数据时,您需要知道将要呈现多少页来呈现页面跳转控件。 目前,我通过运行两次查询来做到这一点,一次包裹在a中以确定总结果,第二次使用限制以仅获取我当前页面所需的结果。 这似乎效率低下。有没有更好的方法来确定在应用之前将返回多少结果? 我正在使用PHP和Postgres。 问题答案: 纯SQL 自2008年以来情况发生了变化。您可以使用窗口函数在一个查询中获取全部计数 和

  • 如何获得包含每个分组集的最大值的行? 关于这个问题,我见过一些过于复杂的变体,但没有一个有好的答案。我试着举一个最简单的例子: 给出一个类似下面的表,包含person,group,和age列,如何得到每个组中最年长的人?(一组内的平局应给出第一个按字母顺序排列的结果) 所需的结果集:

  • 我有以下查询来获得15秒的间隔。然而,即使结果没有值,我也想显示“0”值。 以下是问题; 结果是; 我想要的是这个; 我应该从上面的问题中改变什么?

  • 我的环境是: Spring Boot+Mybatis+Oracle 10g+JDK1.8 我在oracle中得到了一个名为book的表,如下所示: 我用我编写的映射器使它工作并成功地显示了它。但是当我用plsql在这个表中插入了2条记录后,当我用mybatis映射器查询它时,我仍然得到了相同的3条记录,而不是所有的5条记录(如下所示)。 映射器 实体