如何在sql中从组中搜索最大值
我正在学习一些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.
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