MySQL查询我很难过

时间:2013-10-23 18:54:04

标签: mysql

我今天做了一个测试,有两个问题我无法弄清楚。我忘记了第二个,但这是第一个:

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

Variaties:

  • variety_id
  • variety_name

啤酒:

  • beer_id
  • beer_name
  • variety_id
  • beer_alcohol

beer_alcohol是双倍的,代表酒精百分比。

共有38种啤酒和1215种啤酒。

问题是:显示所有单独品种的啤酒,每品种的最高酒精百分比以及具有此百分比的啤酒的名称。

乍一看,这是在variety_id上的“内连接”,在酒精上的“max()”和在variety_id / variety_name上的“group by”。

问题是,这不会显示其品种中酒精含量最高的啤酒的名称。它将按字母顺序显示其品种的第一批啤酒。

我对此表示不满,但我无法开始想象如何在没有功能的情况下做到这一点。 有人可以开导我吗?

3 个答案:

答案 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