通过人行横道表中的计数对 MySQL 8 结果进行排序

热肉丸汤

我有以下 MySQL 8 表:

[submissions]
===
id
submission_type
name

[reject_reasons]
===
id
name

[submission_reject_reasons] -- crosswalk joining the first 2 tables
===
id
submission_id
reject_reason_id

在我的应用程序中,用户可以提交提交,其他用户可以请求更改这些提交。当他们请求这些拒绝时,1+ 个条目将保存到submission_reject_reasons表中(其中存储请求拒绝的提交的 ID,以及拒绝的原因的 ID)。因此,表中的典型条目可能如下所示:

id      submission_id     reject_reason_id
==============================================
45      384               294

submission_id = 384“Fizz Buzz”提交在哪里reject_reason_id = 294是“缺少必填字段”的原因。

我目前有一个查询可以从reject_reasons数据库中获取所有内容

SELECT * FROM reject_reasons

我现在想修改此查询以根据其使用频率对结果进行排序。这意味着查询当前可能返回:

294 | Missing Required Field
14 | Malformed Entry
1885 | Makes No Sense

等等。但是假设表中有 5 个条目,submission_reject_reasons其中 294(缺少必填字段)是reject_reason_id,并且说有 15 个条目,其中 1885(毫无意义)存在,120 个条目存在 14(格式错误的条目)。我需要一个查询,返回所有reject_reasonssubmission_reject_reasons(SRR) 表中的计数排序的查询,降序,以便最常用的出现在排序中的较早。因此结果集将是:

14 | Malformed Entry --> because there are 120 instances of this in the SRR table
1885 | Makes No Sense --> because there are 15 instances in the SRR
294 | Missing Required Field --> because there are only 5 instances in the SRR

此外,我需要从最常用到最不常用的排名。如果原因在 SRR 表中不存在,则它的默认“计数”应为零 (0),但仍应返回到查询中。如果 2+ 个原因计数并列,那么我不在乎它们是如何排序的。这里有什么想法吗?我需要最终结果集只包含rr.idrr.name字段/值。

我最好的尝试不是让我去任何地方:

SELECT rr.id, rr.name
FROM reject_reasons AS rr
LEFT JOIN submission_reject_reasons AS srr on rr.id = srr.reject_reason_id
GROUP BY rr.id
ORDER BY COUNT(*) DESC

有人能帮我冲过终点线吗?谁能发现我哪里出错了?提前致谢!

巴马

您应该按拒绝原因 ID 进行分组。COUNT(*)是您要在每个组中计算的内容。

SELECT rr.id, rr.name
FROM reject_reasons AS rr
JOIN submission_reject_reasons AS srr on rr.id = srr.reject_reason_id
GROUP BY rr.id
ORDER BY COUNT(*) DESC

不需要任何EXISTS检查,因为INNER JOIN不会返回任何不存在于submission_reject_reasons.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MySQL的排序计数不进行分组的结果

显示多个mysql表的结果并进行排序

MySQL根据来自不同表的2列对结果进行排序

如何在mysql中的union子句中对结果进行排序

使用分页在php中对mysql结果进行排序

首先对结果进行排序,然后按mysql中的结果集进行分组

如何对mysql结果进行排序?

如何通过2种不同的排序方式对MySQL结果进行排序?

如何按日期对查询结果进行排序,然后按MySQL中的特定列值排序

如何根据mysql中的另一个表对结果进行排序

数字符串的出现在列表中,然后进行排序的结果 - 8的Java

mysql对高分进行了排序,使玩家位于第8位,以显示完整的15个结果

MySQL:如何通过多行的数值差对SQL查询结果进行排序?

如何在Laravel QueryBuilder / MySQL Spatial软件包中按距离对查询结果进行排序?

在mysql中对结果进行分组和排序(具有分层信息的数据)

如何在MySQL中按日期对相关结果进行分组和排序

MYSQL从两个查询(不是表)中仅选择匹配的记录,然后按B查询对结果进行排序

在MySQL中对域进行排序

使用chrome进行的远程调试仅适用于较旧的人行横道版本[cordova 4]

MySQL从表中对数据进行排序

通过a * b的结果对(a,b)对进行排序

在marklogic 8中对多个地图进行排序

在 django 中对搜索结果进行排序

在mongodb php中对mapReduce结果进行排序

在 ArrayIndexOutOfBoundsException 中对程序执行结果进行排序

在函数tojson中对结果进行排序

如何在PHP中对结果进行排序?

在elasticsearch中对结果组内部进行排序

MySQL连接语句语法错误,无法对结果进行排序