SQL查询:最大枪数

SQL查询:最大枪数,sql,sqlite,max,Sql,Sqlite,Max,架构如下: Shipsname、yearLaunched、country、numGuns、枪械尺寸、排水量 战舰、战名、结果 名字和船是相等的。我的意思是如果“密苏里”是元组中的一个 名称“Missouri”的结果也将显示为ship的元组结果 i、 e.名称='密苏里',船舶='密苏里' 它们是一样的 现在我的问题是,为了列出 数量最多的战列舰列表中的战列舰 枪的尺寸,即枪的尺寸 我试过: SELECT name, max(gunSize) FROM Ships 但这给了我错误的结果 然后我试

架构如下:

Shipsname、yearLaunched、country、numGuns、枪械尺寸、排水量

战舰、战名、结果

名字和船是相等的。我的意思是如果“密苏里”是元组中的一个 名称“Missouri”的结果也将显示为ship的元组结果

i、 e.名称='密苏里',船舶='密苏里' 它们是一样的

现在我的问题是,为了列出 数量最多的战列舰列表中的战列舰 枪的尺寸,即枪的尺寸

我试过:

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