【问题标题】:Count all max number value in difference tables sql计算差异表sql中的所有最大值
【发布时间】:2019-09-16 22:17:44
【问题描述】:

我尝试解决此问题时遇到错误。首先我需要计算 2 个表的所有值,然后我需要在 where 条件下获取所有最大值。

我的代码:

Select *
FROM (
  select Operator.OperatoriausPavadinimas,
  (
    select count(*) 
    from Plan 
    where Plan.operatoriausID= Operator.operatoriausID
  ) as NumberOFPlans 
  from Operator 
)a
where a.NumberOFPlans=  Max(a.NumberOFPlans)

我收到这个错误

消息 147,级别 15,状态 1,第 19 行 聚合可能不会出现在 WHERE 子句中,除非它位于 HAVING 子句或选择列表中包含的子查询中,并且被聚合的列是外部引用。

我不知道如何解决这个问题。

我需要得到这个http://prntscr.com/p700w9

更新 1

计划表包含http://prntscr.com/p7055l 值和 运算符表包含 http://prntscr.com/p705k0 值。

【问题讨论】:

  • 事实上,你的问题有点不清楚。您能否编辑您的问题以将示例数据和预期输出显示为表格文本?
  • 我认为您将不得不进行联接才能获得所需的结果。

标签: sql-server join count sql-order-by ssms


【解决方案1】:

您是否正在寻找...连接两个表并返回具有最大计数的记录的聚合查询?

我怀疑这句话可能如下:

SELECT TOP(1) o.OperatoriausPavadinimas, COUNT(*)
FROM Operatorius o
INNER JOIN Planas p ON p.operatoriausID = o.operatoriausID
GROUP BY o.OperatoriausPavadinimas
ORDER BY COUNT(*) DESC

如果你想允许平局,你可以使用TOP(1) WITH TIES

【讨论】:

  • 但是如果在数据库中会有更多的最大值?我需要得到最大值
  • @mausasu1234:此查询将只返回一条记录,其中OperatoriausPavadinimase 具有跨表OperatoriusPlanas 的最大记录数。你应该在你的数据库上试一试,看看它会返回什么。
  • 我知道,但在我的日期库中有两条记录的最大值相同。
  • 要在结果集中允许平局,您可以使用TOP(1) WITH TIES
  • @mausasu1234:我确实怀疑这个查询符合您的预期。请花时间针对您的数据测试查询。如果您没有得到预期的结果,请编辑您的问题以添加示例数据和预期结果,以使您想要实现的目标更加清晰。之后我们很乐意提供更多帮助!
【解决方案2】:

您可以使用top with ties。您的查询有点难以理解,但我认为您想要:

select top (1) with ties o.OperatoriausPavadinimas, count(*)
from plan p join
     operator o
     on p.operatoriausID = o.operatoriausID
group by o.OperatoriausPavadinimas
order by count(*) desc;

【讨论】:

  • @GMB 。 . .你的有with ties吗?
猜你喜欢
  • 2014-04-15
  • 1970-01-01
  • 2017-10-24
  • 2011-10-27
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 2019-10-11
相关资源
最近更新 更多