Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sql中从组中搜索最大值_Sql_Sql Server_Max_Greatest N Per Group - Fatal编程技术网

如何在sql中从组中搜索最大值

如何在sql中从组中搜索最大值,sql,sql-server,max,greatest-n-per-group,Sql,Sql Server,Max,Greatest N Per Group,我正在学习一些SQL,所以我有一个问题 -我有一张名为TABL -变量:ccname,其值为“瓶子” 下表如下: +----------+---------+-------+--------+ | Name | Price | QTY | CODE | +----------+---------+-------+--------+ | Rope | 3.6 | 35 | 236 | | Chain | 2.

我正在学习一些SQL,所以我有一个问题

-我有一张名为
TABL

-变量
:ccname
,其值为“
瓶子

下表如下:

   +----------+---------+-------+--------+
   | 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
中找到数量更大的
代码!所以我这样翻译:

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

我们的想法是找到表中
Name
列与变量
:ccname
的内容相同的所有行,然后按数量降序排列,最后选择第一行,其中必须是数量最大的一个,因为它们是按降序排序的。

使用
排序,适当的
,其中
,以及将结果集限制为一行的内容:

SELECT CODE
FROM TABL
WHERE name = :ccname
ORDER BY QTY DESC
FETCH FIRST 1 ROW ONLY;
注意:某些数据库将ANSI标准
仅获取前1行
拼写为
限制
选择前1行

试试这个

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

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

  • 选择前1名
  • 限制1
  • 仅获取前1行
语法示例

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


使用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
说明:


您首先使用子查询计算“瓶子”的最大值,然后连接两个表以选择MaxQuantity和相同名称的对应行。

请使用您正在使用的数据库标记您的问题。好的,我完成了。它是microsoft sql server。
  SELECT CODE
    FROM TABL
   WHERE Name = :ccname
ORDER BY QTY DESC
   FETCH FIRST 1 ROW ONLY;
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