Mysql 我被难倒了

Mysql 我被难倒了,mysql,Mysql,我今天做了一个测试,有两个问题我想不出来。我忘了第二个,但这是第一个: 你有一个关于啤酒的数据库。三个表格,只有两个与问题相关。这些是: 变量: 品种识别号 品种名称 啤酒: 啤酒 啤酒名 品种识别号 啤酒和酒精 啤酒和酒精是双倍的,代表酒精的百分比 共有38个啤酒品种和1215个啤酒品种 问题是:显示所有不同品种的啤酒,每个品种的最高酒精百分比,以及有此百分比的啤酒的名称 乍一看,这是variety_id上的一个内部连接,酒精上的一个max,以及variety_id/variety_名称上的一

我今天做了一个测试,有两个问题我想不出来。我忘了第二个,但这是第一个:

你有一个关于啤酒的数据库。三个表格,只有两个与问题相关。这些是:

变量:

品种识别号 品种名称 啤酒:

啤酒 啤酒名 品种识别号 啤酒和酒精 啤酒和酒精是双倍的,代表酒精的百分比

共有38个啤酒品种和1215个啤酒品种

问题是:显示所有不同品种的啤酒,每个品种的最高酒精百分比,以及有此百分比的啤酒的名称

乍一看,这是variety_id上的一个内部连接,酒精上的一个max,以及variety_id/variety_名称上的一个group by

问题是,这不会显示酒精含量最高的啤酒的名称。它将按字母顺序展示该品种的首款啤酒

我把头撞到了它上面,但我无法想象没有函数怎么做。
有人能告诉我吗?

再做一次连接,连接varietyid和%。在外面这样做可以得到正确的信息


如果有相同百分比的啤酒,这将返回2个结果

您也可以再选择,例如

select variety_id, variety_name, beer_name, abv
FROM varieties
JOIN (
  select beer_id, beer_name, variety_id, MAX(beer_alcohol) as abv
  FROM beers
  GROUP BY variety_id
) booziest ON booziest.variety_id = varieties.variety_id

我通常喜欢样本数据和样本输出,但让我们盲目地回答这个问题

这是一个n=1的最大n组问题。您可以使用包含group by或(我个人最喜欢的)left join的派生表来解决此问题:

SELECT v.variety_id, v.variety_name, b1.* FROM beers b1
LEFT JOIN beers b2
  ON b1.variety_id = b2.variety_id AND b1.beer_alcohol < b2.beer_alcohol
WHERE b2.beer_alcohol IS NULL
JOIN varieties v ON b1.variety_id = v.variety_id

啤酒数据库?我是唯一一个从事无聊金融工作的人吗我想你快到了。我想,你还需要按啤酒名称分组,然后使用啤酒酒精和品种id再次加入啤酒表。@PaoloFalabella抱歉,这会生成整个啤酒列表,而不仅仅是每个品种1杯。对于我来说,这个查询总是给出第一条记录的啤酒id、啤酒名称,还有正确欲望记录的品种id和abv。为了解决这个问题,您必须在GroupBy中包含beer_名称和beer_id…是的,谢谢-在这种情况下,MySQL中的分组行为有点模糊,我没有指定,这让我很懒。要正确分组,您应该指定所选的每一个非聚合列,在本例中为beer_id和beer_nameSorry,但结果相同。显示的每个beer_名称都是它的第一个名称,按字母顺序排列。最后一行的SQL语法中有一个错误。我用第二行切换到最后一行,结果是168行。这可能与不包括任何形式的分组的查询有关。谢谢你的帮助。