如何从 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
拼写为 LIMIT
或 SELECT 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 对应行。
我刚刚学了一些SQL,所以我有一个问题。
-我有一个名为 TABL
-一个变量: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
拼写为 LIMIT
或 SELECT 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 对应行。