【问题标题】:SQl query on max summation [duplicate]SQl查询最大总和[重复]
【发布时间】:2020-07-10 07:30:05
【问题描述】:

我有两张桌子

单位

Unit_id
Unit_name
Unit_cost

组件

Component_id
Component_name
Unit_id

它们通过Unit_id链接在一起。

我需要具有最高总成本 (Unit.Unit_cost) 的一个单元中的单个 Unit_name,所有组件都通过 Unit_id 链接到 Units 表>。请注意,我只需要 Unit_Name,而不需要总成本。

最好在查询中使用“Top(1)”吗?查询的外观如何?

【问题讨论】:

  • 请向我们展示样本数据和预期结果。 unit_costunit 表中,所以不清楚components 对您的查询有何用途。
  • 你可以使用rank()函数
  • 我将在单独的线程上重新发布我的问题

标签: sql-server tsql greatest-n-per-group


【解决方案1】:

我怀疑您希望所有组件都链接到最高成本单元。

如果是这样,您有几个选择。您可以使用窗口函数对每单位成本的记录进行排名:

select *
from (
    select u.unit_name, c.*, rank() over(order by u.unit_cost desc) rn
    from unit u
    inner join components c on c.unit_id = u.unit_id
) t
where rn = 1

或者你可以加入一个得到最高单元的查询;假设您的数据库支持 T-SQL 语法top (1)(您在问题中提到):

select u.unit_name, c.*
from (select top(1) with ties * from unit order by unit_cost desc) u
inner join components c on c.unit_id = u.unit_id

两个查询都允许平局:如果不同单位的成本最高,则它们的两个组件都将被列出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多