如何从 sql 组中搜索最大值

How to search max value from group in sql

我刚刚学了一些SQL,所以我有一个问题。

-我有一个名为 TABL

的 table

-一个变量:ccname,其值为“Bottle

table如下:

   +----------+---------+-------+--------+
   | Name     |  Price  |  QTY  |  CODE  |
   +----------+---------+-------+--------+ 
   | Rope     |   3.6   |   35  |   236  |
   | Chain    |   2.8   |   15  |   237  |
   | Paper    |   1.6   |   45  |   124  |
   | Bottle   |   4.5   |   41  |   478  |
   | Bottle   |   1.8   |   12  |   123  | 
   | Computer | 1450.75 |   71  |   784  |
   | Spoon    |   0.7   |   10  |   412  |
   | Bottle   |   1.3   |   15  |   781  |
   | Rope     |   0.9   |   14  |   965  |
   +----------+---------+-------+--------+

现在我想从变量:ccname中找出数量较大的CODE!所以我这样翻译:

SELECT CODE
FROM TABL
GROUP BY :ccname
WHERE QTY=MAX(QTY)

在一个完美的世界中,结果会变成 478。 在SQL的世界里我应该写什么才能得到478?

你可能想要这样的东西:

SELECT code 
FROM TABL
WHERE Name=:ccname
ORDER BY QTY DESC
LIMIT 1

思路是找到table的所有行,其Name列与变量:ccname的内容相同,然后按数量降序排列,最后我们select第一个,必须是数量最多的,因为它们是按降序排列的。

使用 ORDER BY、适当的 WHERE 和将结果集限制为一行的东西:

SELECT CODE
FROM TABL
WHERE name = :ccname
ORDER BY QTY DESC
FETCH FIRST 1 ROW ONLY;

注意:一些数据库将 ANSI 标准 FETCH FIRST 1 ROW ONLY 拼写为 LIMITSELECT TOP 1

试试这个

SELECT CODE
FROM TABLENAme
WHERE QTY = (SELECT MAX(QTY) FROM TablName WHERE Name = :ccname)

根据您的特定数据库,在通过 ORDER BY 子句对现有列进行排序后,您可以使用以下选项之一将结果集限制为单个值:

  • SELECT TOP 1
  • LIMIT 1
  • FETCH FIRST 1 ROW ONLY

语法示例

  SELECT TOP 1 Code
    FROM TABL
   WHERE Name = :ccname
ORDER BY QTY DESC

  SELECT Code
    FROM TABL
   WHERE Name = :ccname
ORDER BY QTY DESC
   LIMIT 1

  SELECT CODE
    FROM TABL
   WHERE Name = :ccname
ORDER BY QTY DESC
   FETCH FIRST 1 ROW ONLY;

使用join也可以有效解决问题:

Select t1.Code
From   TABL As t1 Join (
      Select Name, Max(table.QTY) as MaxQTY
      From   TABL
      Where  Name = :ccname
      Group by Name
) As t2
Where t1.QTY = t2.MaxQTY And t1.Name = t2.Name

说明:

您首先使用子查询计算 "Bottle" 的最大值,然后将两个表连接到具有 MaxQTY 和相同名称的 select 对应行。