mysql - 如何使用 WHERE 子句获得前 3 个平均值?
问题描述
我正在使用一个法国房地产数据库,其中记录了每学期在法国的所有销售额。它有3个表:
- Localite,具有城市(公社)和州(部门)数据,
- Bien,具有房屋数据(m²、地址等),仅在此查询中使用,因为表的链接方式,以及
- 具有价格(ValeurFonciere)数据的突变。
使用以下方法创建的:
CREATE TABLE Localite (
Commune_ID SMALLINT UNSIGNED NOT NULL,
Commune VARCHAR(50) NOT NULL,
Departement VARCHAR(3) NOT NULL,
PRIMARY KEY (Commune_ID)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE Bien (
Bien_ID SMALLINT UNSIGNED NOT NULL,
SurCar1 FLOAT NOT NULL,
TypeLoc VARCHAR(15) NOT NULL,
NoPP SMALLINT NOT NULL,
NoVoie VARCHAR(5) NOT NULL,
TypeVoie VARCHAR(10) NOT NULL,
NomVoie VARCHAR(50) NOT NULL,
CodePostal VARCHAR(5) NOT NULL,
Commune_ID SMALLINT UNSIGNED NOT NULL,
PRIMARY KEY (Bien_ID)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE Mutation (
Mutation_ID SMALLINT UNSIGNED NOT NULL,
DateMutation DATETIME NOT NULL,
ValeurFonciere INT UNSIGNED NOT NULL,
Bien_ID SMALLINT UNSIGNED NOT NULL,
PRIMARY KEY (Mutation_ID)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
我需要找到平均售价最高的 3 个城市,但只针对少数几个州。
当我使用这个时:
SELECT Departement, Commune, avg(ValeurFonciere) as Prix_Moy
FROM localite, bien, mutation
where mutation.Bien_ID = bien.Bien_ID
And bien.Bien_ID = localite.Commune_ID
AND Departement in (6, 13, 33, 59, 69)
GROUP BY Commune
ORDER BY Commune DESC
limit 3;
我在所有 5 个部门(即 6、13、33、59、69)中都获得了前 3 名。在法国,每个部门(州)都有自己的识别号码,所以这些号码是我感兴趣的部门。
但是我如何获得每个部门的前 3 名(所以,总共 15 个公社)?
我在这里查看并找到了几个使用带有分区的 rank() 函数的解决方案,但我不知道这是否是正确的解决方案,因为我不能告诉它只查看我需要的 5 个部门。
任何帮助将不胜感激。
解决方案
推荐阅读
- javascript - 发布请求在 NodeJS 中不起作用,可以使用 Request
- javascript - 根据 Javascript 中的指令对列表进行排序
- python - 在 python3 中,dict.items() 以不同的顺序返回项目
- python - 计算累积和,其中 Sum 可以通过条件重置
- python - AWS SageMaker 停止运行且没有错误/警告输出
- python - Adam在keras中如何实现学习率衰减
- ruby - Rspec:在上下文中正确使用 Let?
- c# - 当我认为我已经定义了需要定义的内容时,为什么会出现命名空间错误?
- javascript - 尝试使用 nightmare.js 从搜索结果中获取数据,但出现错误:“无法读取未定义的属性 'click'”
- c# - 数据网格中的 AutoSuggestBox?