SQL查询:最大枪数
架构如下: Shipsname、yearLaunched、country、numGuns、枪械尺寸、排水量 战舰、战名、结果 名字和船是相等的。我的意思是如果“密苏里”是元组中的一个 名称“Missouri”的结果也将显示为ship的元组结果 i、 e.名称='密苏里',船舶='密苏里' 它们是一样的 现在我的问题是,为了列出 数量最多的战列舰列表中的战列舰 枪的尺寸,即枪的尺寸 我试过:SQL查询:最大枪数,sql,sqlite,max,Sql,Sqlite,Max,架构如下: Shipsname、yearLaunched、country、numGuns、枪械尺寸、排水量 战舰、战名、结果 名字和船是相等的。我的意思是如果“密苏里”是元组中的一个 名称“Missouri”的结果也将显示为ship的元组结果 i、 e.名称='密苏里',船舶='密苏里' 它们是一样的 现在我的问题是,为了列出 数量最多的战列舰列表中的战列舰 枪的尺寸,即枪的尺寸 我试过: SELECT name, max(gunSize) FROM Ships 但这给了我错误的结果 然后我试
SELECT name, max(gunSize)
FROM Ships
但这给了我错误的结果
然后我试着:
SELECT s.name
FROM Ships s,
(SELECT MAX(gunSize) as "Largest # of Guns"
FROM Ships
GROUP BY name) maxGuns
WHERE s.name = maxGuns.name
但是SQLite管理员给了我一个错误,说不存在这样的列“maxGuns”
即使我把它指定为别名:maxGuns
你们知道这个问题的正确答案是什么吗?
谢谢 查询中的问题是子查询没有名为name的列 无论如何,要找到最大数量的枪,只需使用SelectMaxGunsizefromShips。 要获得所有拥有该数量火炮的舰船,只需简单比较该值:
SELECT name
FROM Ships
WHERE gunSize = (SELECT MAX(gunSize)
FROM Ships)
它不存在,因为您试图在“Where”子句中为子查询添加别名,而不是为表中的特定列添加别名。为了识别拥有最多枪支的船只,您可以尝试以下方法:
with cte as (select *
,ROW_NUMBER() over (order by s.gunsize desc) seq
from ships s )
select * from cte
where seq = '1'
另一种方法是:它将只选择第一排,其中包含拥有最多火炮的舰船
select Top 1 *
from ships s
order by s.gunsize desc
你为什么要提到战斗表?这似乎与这个问题无关。太好了。谢谢你的帮助!这不适用于SQLite。这个问题问的是所有拥有最多枪支的船只。
WITH TAB_SHIPS(NAME, NUMGUNS,DISPLACEMENT) AS (SELECT NAME, NUMGUNS,DISPLACEMENT FROM SHIPS AS S
LEFT JOIN CLASSES AS C
ON S.CLASS=C.CLASS
WHERE C.NUMGUNS >=ALL(SELECT NUMGUNS FROM CLASSES C1 WHERE C1.DISPLACEMENT = C.DISPLACEMENT )
UNION
SELECT SHIP, NUMGUNS,DISPLACEMENT FROM OUTCOMES AS O
LEFT JOIN CLASSES AS C
ON C.CLASS=O.SHIP
WHERE C.NUMGUNS >=ALL(SELECT NUMGUNS FROM CLASSES C1 WHERE C1.DISPLACEMENT = C.DISPLACEMENT ) )
SELECT NAME FROM TAB_SHIPS
WHERE NUMGUNS IS NOT NULL