程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使用 WHERE 子句获得多个组和表的前 3 个平均值?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何使用 WHERE 子句获得多个组和表的前 3 个平均值??

开发过程中遇到如何使用 WHERE 子句获得多个组和表的前 3 个平均值?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何使用 WHERE 子句获得多个组和表的前 3 个平均值?的解决方法建议,希望对你解决如何使用 WHERE 子句获得多个组和表的前 3 个平均值?有所启发或帮助;

我正在使用一个法国房地产数据库,其中记录了每学期在法国的所有销售额。它有 3 个表:

  1. Localite,其中包含城市(公社)和州(部门)数据,
  2. BIEn,它具有房屋数据(平方米、地址等)并且仅在此查询中使用,因为表的链接方式,以及
  3. 变异,具有价格 (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 datetiR_574_11845@E NOT NulL,ValeurFoncIErE int UNSIGNED NOT NulL,BIEn_ID smaLliNT UNSIGNED NOT NulL,PRIMARY KEY (R_574_11845@utation_ID)
)ENGINE=InnoDB DEFAulT CHARSET=utf8mb4;

Example Mutation Data Example Localite Data

我需要找到平均销售价格最高的 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 Prix_Moy DESC
limit 3;

我在所有选定的 5 个部门中都获得了前 3 名(即 6、13、33、59、69)。在法国,每个部门(州)都有自己的识别号码,所以这些号码就是我感兴趣的部门。

但是我如何获得每个部门的前 3 名(所以,总共 15 个公社)?

我在这里查看并找到了几个使用带有分区的 rank() 函数的解决方案,但我不知道这是否是这里的正确解决方案,因为我不能告诉它只查看我的 5 个部门需要。

任何帮助将不胜感激。

解决方法

我认为您应该通过 Prix_Moy 而不是 comune 订购

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 Prix_Moy DESC
LIMIT 3;
,

在朋友的帮助下让我有点想通了,但这是我们想出的,给出了所需的结果:

WITH VF_par_Commune AS 
        (SELECT Departement,avg(ValeurFoncierE) as AVF 
FROM localite,mutation
where mutation.bien_ID = bien.bien_ID
And bien.Commune_ID = localite.Commune_ID
AND Departement IN (6,69) 
GROUP BY Departement,Commune
)
SELECT Departement,round(AVF,2) AS Prix_Moy 
FROM ( 
SELECT Departement,AVF,rank() OVER (PARTITION BY Departement ORDER BY AVF desc) AS rang FROM VF_par_CommunE) AS result 
WHERE rang <= 3;

大佬总结

以上是大佬教程为你收集整理的如何使用 WHERE 子句获得多个组和表的前 3 个平均值?全部内容,希望文章能够帮你解决如何使用 WHERE 子句获得多个组和表的前 3 个平均值?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。