【问题标题】:sql - find max valuesql - 找到最大值
【发布时间】:2011-12-10 19:51:28
【问题描述】:

我有一个包含 3 列的表格:代码、年份、百分比。

我需要返回 2009 年百分比最低(最小)的代码。在此之后,我还想要代码的名称,它存在于我制作的其他表中。

我只考虑使用 CREATE VIEW,但我不想这样做。

【问题讨论】:

  • select top 1 with ties Code from yourtable where year = 2009 order by percentage
  • @Oded 它总是给我带来问题,这些问题已经在我的数据库中定义。我读到这是网络,我解决了它。但时不时地,问题重演。
  • 是否可以绑定?一年中的两个代码可以具有相同的百分比吗?
  • 既然你要MIN,为什么标题Finding MAX

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


【解决方案1】:
Select table.code, table.year, table.percentage, othertable.name
from table
inner join othertable  on table.FKId = othertable.PKid
where year = 2009 
  and percentage = 
  (select min(percentage) 
   from table 
   where year = 2009)

已更新以包含其他表...因为我们没有名称。

更新 现在我们有了表名...更新了第三次,因为我知道年份是字符串。

Select E.Code, C.Name 
From dbo.Exam E
inner join dbo.Course C
  ON E.Code = C.Code  
Where E.Year = '2009' and --<-- PROBLEM LIKELY HERE year was string not int.
 E.Fail = (select MIN(E2.Fail) 
                  from dbo.Exam E2 where E2.Year = '2009') --<--Don't forget here too.

来自 cmets:样本数据:

 INSERT INTO Exam VALUES(333,'2009',40) 
 INSERT INTO Exam VALUES(333,'2009',20) 
 INSERT INTO Exam VALUES(555,'2009',19) 
 INSERT INTO Exam VALUES(444,'2009',19) 
 INSERT INTO Exam VALUES(777,'2009',23) 
 INSERT INTO Exam VALUES(333,'2009',0) 
 INSERT INTO Course VALUES(111,'Name1',5) 
 INSERT INTO Course VALUES(333,'Name2',5) 
 INSERT INTO Course VALUES(444,'Name3',6) 
 INSERT INTO Course VALUES(555,'Name4',3) 
 INSERT INTO Course VALUES(777,'Name5',3) 
 INSERT INTO Course VALUES(999,'Name6',6) 

假设结果应该是 姓名2, 5

【讨论】:

  • 正是我要发布的内容。 +1 狙击我:p
  • 应该还是要查找代码的名字,但这是一个简单的连接
  • @xQbert select code, min(percentage) from table where year=2009 group by code 有什么问题
  • @RoyiNamir - 它不起作用。它将找到每个代码的最小百分比。
  • 点头.. 只能返回 1 个值。不 3. 如果 2009、2010、2011 存在,我只想要 2009;因此不需要分组。
【解决方案2】:

您可以使用group by 查找一年中的最低百分比,然后连接回主表以查找对应的其他列:

select  *
from    CodeYearPercTbl cyp
join    CodeTbl c
on      c.Code = cyp.Code
join    (
        select  Year
        ,       min(Percentage) as MinPerc
        from    CodeYearPercTbl
        group by
                Year
        ) as filter
on      filter.Year = cyp.Year
        and filter.MinPerc = cyp.Percentage
where   cyp.Year = 2009

【讨论】:

    【解决方案3】:

    表 1:代码、年份、百分比 表 2:代码、代码名称

    select T1.Code,T2.CodeName,T1.Percentage from
    (
         select TOP 1 Code,Percentage 
         from Table-1 
         where Year = '2009' 
         order by Percentage asc
    ) T1  inner join Table-2 T2 on T1.Code = T2.Code
    

    【讨论】:

      【解决方案4】:

      试试这个:

      select a.Code, c.Name 
      from  YourTable a inner join AnotherTable c on a.Code = c.Code 
      where a.Percentage = (select MIN(Percentage) 
                            from YourTable  b where b.Year = '2009'
                           )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-12
        • 2021-05-24
        • 2019-12-17
        相关资源
        最近更新 更多