【发布时间】:2018-02-04 04:47:04
【问题描述】:
我很难思考这个查询。我只是不太了解MYSQL。我有两张表 - 一张是学校信息,另一张是评论信息。
我正在尝试返回所选国家/地区所有学校的表格列表(用户单击地图,这将调用该查询)。该表列出了一些学校信息和平均复习分数。在我的评论表中,我有一列确定评论是否“活跃”。意思是用户完成并发布了它。
我能够获得平均总数的学校列表,其中将包括没有评论的学校,但它也包括未“发布”的平均评论(它只是显示为 null,那就是很好,因为我可以稍后处理)。我还可以获得一个列出学校和正确平均值的查询,但它会过滤掉没有评论的学校(因为没有值为“1”的列)。
我正在努力思考如何获取我需要的数据。我知道问题出在 WHERE active="1" 部分,但我觉得我需要一个 UNION 来连接数据。
我正在尝试获取一个国家/地区所有学校的列表,以及平均分数(如果有) - 并且只有设置为活跃的平均评论,如果没有则仍然返回学校评论。
这是我正在处理的查询:
//This gives me all of the schools with an average, but filters the schools with out a review
knex.select('schools.SID','schools.schoolName','schools.schoolCity',
knex.raw('ROUND(AVG(((Q1+Q2+Q3+Q4+Q5+Q6+Q7+Q8+Q9+Q10)/(52*10)*10)),2) AS average'))
.from('reviews')
.rightJoin('schools', 'schools.SID', 'reviews.schoolID')
.where('schools.schoolCountryCode', countryId)
.andWhere('reviews.active', '=', 1)
.groupBy('schools.SID')
.orderByRaw('average DESC, schools.schoolCity ASC')
//By commenting out the andWhere I get all of the schools and an average, but it includes the reviews in the average that are not published.
knex.select('schools.SID','schools.schoolName','schools.schoolCity',
knex.raw('ROUND(AVG(((Q1+Q2+Q3+Q4+Q5+Q6+Q7+Q8+Q9+Q10)/(52*10)*10)),2) AS average'))
.from('reviews')
.rightJoin('schools', 'schools.SID', 'reviews.schoolID')
.where('schools.schoolCountryCode', countryId)
//.andWhere('reviews.active', '=', 1)
.groupBy('schools.SID')
.orderByRaw('average DESC, schools.schoolCity ASC')
如果您需要数据/列:
School Table
SID schoolName schoolCity schoolCountryCode
1 ASIJ Tokyo JP
2 St. Mary's Tokyo JP
Reviews Table
RID schoolID active Q1 Q2 Q3 ...
1 1 1 7 8 9
【问题讨论】:
-
您向我们提出了查询,但您没有向我们提供任何数据或您尝试做什么的解释。
-
蒂姆,你真的读过这个问题吗?你是什么意思“你正在尝试做的事情”。我写了“我正在尝试做的事情”——字面意思是 TWICE。我将加粗您要询问的部分,以使其更加明显。我没有添加数据,因为我认为从查询中的表名和列名中推断数据很容易。不要试图变得粗鲁,但如果你想帮忙,那就说“嘿,很高兴能帮助我,我只需要更多信息。这就是我需要的”,但当我给你的东西时不要试图叫我出来正在询问。