代码之家  ›  专栏  ›  技术社区  ›  Gretchen

查找最大值为

  •  0
  • Gretchen  · 技术社区  · 14 年前

    我在sqlite中有一个非常简单的表,其模式如下:

    CREATE TABLE IF NOT EXISTS Palettes 
                 (id INTEGER PRIMARY KEY AUTOINCREMENT, 
                 class TEXT, count INTEGER, name TEXT);
    

    这些表示颜色调色板,并且几个调色板可以具有相同的名称,但计数不同(即大小)。

    我要做的是为每一组命名的调色板找到一个具有最大(或最小)计数的调色板。

    我首先想到的是:

    SELECT * FROM Palettes GROUP BY name;
    

    但是,当然,我得到的哪一行是任意的。进一步看,即使我这样做:

    SELECT MAX("count"), * FROM Palettes GROUP BY name;
    

    我仍然有一个任意的排。 最后一枪:

    SELECT * FROM (SELECT * FROM Palettes ORDER BY "count") GROUP BY name;
    

    似乎 去工作,但我在任何地方都找不到任何保证。

    有人能解决这个问题吗?当然,我可以用代码来解决它,但如果可能的话,我更喜欢SQL解决方案。

    谢谢, -马特

    1 回复  |  直到 14 年前
        1
  •  1
  •   Jonathan Leffler Toon Krijthe    14 年前

    这应该可以做到:

    SELECT P.*
      FROM Palettes AS P JOIN
           (SELECT name, MAX("count") AS max_count
              FROM Palette
             GROUP BY Name) AS MC
           ON MC.Name = P.Name AND P."count" = MC.Max_Count;
    

    如果有多个行具有相同的特定名称的最大计数,则将返回多个行。

    我在“count”周围使用双引号,因为它当然也是关键字;双引号将名称转换为分隔标识符。