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

子查询上的分组MAX()

萧阳波
2023-03-14
问题内容

我正在尝试计算表中的最大值以及该表中的其他值。但是,我为此做的表不是“真实”表,而是由子查询生成的表。这给我带来了问题,因为我认为如果不重新指定整个子查询就无法两次加入它。

我目前有一个SQL Server解决方案,使用ROW_NUMBER() OVER (PARTITION BY providerId ORDER BY partnershipSetScore DESC) rnk,但我正在寻找与DBMS无关的版本,因为该项目的单元测试在不具有此功能的Sqlite
DB中运行。

如果它们有用,这是架构和我的SQL Server特定查询:

Course:

  • int id
  • varchar name
  • int schoolId

School:

  • int id
  • varchar name

Partnership:

  • int id
  • varchar partnershipName

SchoolPartnership:

  • int id
  • int schoolId
  • int partnershipId

这是查询:

SELECT
    schoolId,
    partnershipId AS bestPartnershipSetId,
    partnershipScore AS bestPartnershipScore
FROM
(
    SELECT
        pp.schoolId,
        partnershipScores.partnershipId,
        partnershipScores.partnershipScore,
        ROW_NUMBER() OVER (PARTITION BY schoolId ORDER BY partnershipScore DESC) rnk
    FROM schoolPartnership pp
    INNER JOIN (
        SELECT
            pp.partnershipId,
            (
                (CASE WHEN SUM(CASE WHEN c.name LIKE '%French%' THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END)
                + (CASE WHEN SUM(CASE WHEN c.name LIKE '%History%' THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END)
            ) AS partnershipScore
        FROM schoolPartnership pp
        INNER JOIN course c ON c.schoolId = pp.schoolId
        GROUP BY partnershipId
    ) AS partnershipScores ON partnershipScores.partnershipId = pp.partnershipId
) AS schoolPartnershipScores
WHERE rnk = 1

问题答案:

我没有找到解决方案(除了重复子查询,这是我一直在努力避免的事情),因此我只为PHP中的每个partnershipScore标识了MAX行,并丢弃了其他任何行。这不是一个理想的解决方案,但是由于我需要跨平台方法,因此没有太多其他选择可供我选择。



 类似资料:
  • GROUP 分组查询 >[danger] 分组查询,顾名思义就是按照组区分开,进行查询,比如按照性别分组 > 注意!!! group by 后面分组的字段不能随便加,比如 group by 'sex' 那么,查询字段必须为 sex 按照性别分组查询全部数学成绩的平均分 const { Sequelize } = app; // 按照性别分组查询全班数学成绩的平均分 const ret = awai

  • 问题内容: 如何在按部分分组的查询中使用子查询? 我使用SQL Server 2008 R2和Delphi 2010 我收到此错误: 像这个查询: 按t1.sen分组 问题答案: 这是真实的方式

  • 我必须计算ARPU(收入/#用户),但我得到了这个错误: 子查询使用外部查询第7行的未分组列“usage_records.date”:WHERE created_at<=date_trunc('day',usage_records.d...^) null

  • 主要内容:GROUP BY单独使用,GROUP BY 与 GROUP_CONCAT() ,GROUP BY 与聚合函数,GROUP BY 与 WITH ROLLUP在 MySQL 中, GROUP BY 关键字可以根据一个或多个字段对查询结果进行分组。 使用 GROUP BY 关键字的语法格式如下: GROUP BY  <字段名> 其中,“字段名”表示需要分组的字段名称,多个字段时用逗号隔开。 GROUP BY单独使用 单独使用 GROUP BY 关键字时,查询结果会只显示每个分组的第一条记录。

  • 我们来说说几种查询分组的方法 查找所有分组 $groups = Sentry::findAllGroups(); 通过分组 id 查找一个分组 try { $group = Sentry::findGroupById(1); } catch (Cartalyst\Sentry\Groups\GroupNotFoundException $e) { echo '分组不存在'; }

  • 问题内容: 我正在尝试在postgres中的查询中使用group by。我无法按照我想要的方式对其进行工作,以便根据需要对结果进行分组。 这是对我刚刚回答的递归查询的另一个堆栈问题的扩展。但是现在我需要能够将结果分组到最终查询的root_id列上。这是之前的查询: 这是我想做的,以便将具有相同parent_comment_id的所有记录保存在一起。 可能有许多记录返回了相同的parent_comm