【问题标题】:sql - getting the id from a row based on a group bysql - 根据组从行中获取 id
【发布时间】:2010-04-06 20:34:29
【问题描述】:

表 A

  • tableAID
  • tableBID
  • 等级

表 B

  • tableBID
  • 姓名
  • 说明

表 A 从两个表中的 tableBID 链接到表 b。

如果我想在表 A 中找到分数最高的行,对于表 B 中的每一行,我会这样编写查询:

select max(grade) from TableA group by tableBID

但是,我不只是想要成绩,我想要成绩加上该行的 id。

【问题讨论】:

    标签: sql group-by


    【解决方案1】:

    你可以试试

    SELECT  a.*
    FROM    TableA a INNER JOIN
            (
                SELECT  tableBID,
                        MAX(grade) MaxGrade
                FROM    TableA
                GROUP BY tableBID
            ) B ON a.tableBID = B.tableBID AND a.grade = B.MaxGrade
    

    使用 Sql Server 2005 ROW_NUMBER 函数你也可以试试

    SELECT  tableAID,
            tableBID,
            grade
    FROM    (
                SELECT  *,
                        ROW_NUMBER() OVER (PARTITION BY tableBID ORDER BY grade DESC) RowNum
                FROM    @TableA
            ) A
    WHERE   a.RowNum = 1
    

    【讨论】:

      【解决方案2】:

      假设你只有一个 Max()(巨大的假设)你可以做 min(tableaid) where Grade = (select max(grade) etc....)

      或者如果你想要所有匹配的 id

      SELECT TableAID, Grade
      FROM TableA INNER JOIN (SELECT  tableBID,
           MAX(grade) Grade
           FROM    TableA
           GROUP BY tableBID) MaxGrade 
      ON TableA.Grade = MaxGrade.Grade 
      

      【讨论】:

        【解决方案3】:

        只需使用一点自引用的 NOT EXISTS 子句:

        DECLARE @tableA TABLE (tableAID int IDENTITY(1,1), tableBID int, grade int)
        
        INSERT INTO @tableA(tableBID, grade) VALUES(10, 1)
        INSERT INTO @tableA(tableBID, grade) VALUES(10, 3)
        INSERT INTO @tableA(tableBID, grade) VALUES(20, 4)
        INSERT INTO @tableA(tableBID, grade) VALUES(20, 8)
        INSERT INTO @tableA(tableBID, grade) VALUES(30, 10)
        INSERT INTO @tableA(tableBID, grade) VALUES(30, 6)
        
        SELECT tableAID, grade
        FROM @tableA ta
        WHERE NOT EXISTS (SELECT 1 FROM @tableA WHERE tableBID = ta.tableBID AND grade > ta.grade)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-07-26
          • 1970-01-01
          • 2023-01-22
          • 2013-03-05
          • 1970-01-01
          • 1970-01-01
          • 2020-02-16
          • 1970-01-01
          相关资源
          最近更新 更多