我今天做了一个测试,有两个问题我无法弄清楚。我忘记了第二个,但这是第一个:
你有一个关于啤酒的数据库。三个表,只有2个与问题相关。这些是:
Variaties:
啤酒:
beer_alcohol是双倍的,代表酒精百分比。
共有38种啤酒和1215种啤酒。
问题是:显示所有单独品种的啤酒,每品种的最高酒精百分比以及具有此百分比的啤酒的名称。
乍一看,这是在variety_id上的“内连接”,在酒精上的“max()”和在variety_id / variety_name上的“group by”。
问题是,这不会显示其品种中酒精含量最高的啤酒的名称。它将按字母顺序显示其品种的第一批啤酒。
我对此表示不满,但我无法开始想象如何在没有功能的情况下做到这一点。 有人可以开导我吗?
答案 0 :(得分:0)
再做一个加入blendid和%的连接。在外面这样做会获得正确的信息。
如果有相同百分比的啤酒,这将带来2个结果答案 1 :(得分:0)
你也可以选择,例如
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
答案 2 :(得分:0)
我通常喜欢有样本数据和样本输出,但我们盲目地回答这个问题。
这是一个每组最大的问题(n = 1)。您可以使用派生表来解决此问题,该表包含或者我个人最喜欢的左连接:
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