按人行横道中存在的计数排序 MySQL 8 个结果 table
Ordering MySQL 8 results by count existence in a crosswalk table
我有以下 MySQL 8 tables:
[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
table(其中存储请求拒绝的提交 ID,以及拒绝原因的 ID正在制作)。因此 table 中的典型条目可能如下所示:
id submission_id reject_reason_id
==============================================
45 384 294
其中 submission_id = 384
是“Fizz Buzz”提交,reject_reason_id = 294
是“缺少必填字段”的原因。
我目前有一个从数据库中提取所有 reject_reasons
的查询:
SELECT * FROM reject_reasons
我现在想修改此查询以根据使用频率对结果进行排序。意味着查询当前可能 return:
294 | Missing Required Field
14 | Malformed Entry
1885 | Makes No Sense
等但是假设 submission_reject_reasons
table 中有 5 个条目,其中 294(缺少必填字段)是 reject_reason_id
,并假设有 15 个条目,其中 1885(毫无意义)存在,和 120 个条目,其中存在 14 个(格式错误的条目)。我需要一个查询 returns 所有 reject_reasons
按它们在 submission_reject_reasons
(SRR) table 中的计数排序,降序排列,以便最常用的出现在排序中的较早位置.因此结果集将是:
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 table 中不存在原因,它应该有一个默认的“计数”为零 (0),但仍应在查询中返回。如果 2 个以上的原因计数并列,那么我不在乎它们是如何排序的。这里有什么想法吗?我需要最终结果集只包含 rr.id
和 rr.name
field/values.
我最好的尝试就是没有让我到任何地方:
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
不会 return 任何 submission_reject_reasons
中不存在的拒绝原因。
我有以下 MySQL 8 tables:
[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
table(其中存储请求拒绝的提交 ID,以及拒绝原因的 ID正在制作)。因此 table 中的典型条目可能如下所示:
id submission_id reject_reason_id
==============================================
45 384 294
其中 submission_id = 384
是“Fizz Buzz”提交,reject_reason_id = 294
是“缺少必填字段”的原因。
我目前有一个从数据库中提取所有 reject_reasons
的查询:
SELECT * FROM reject_reasons
我现在想修改此查询以根据使用频率对结果进行排序。意味着查询当前可能 return:
294 | Missing Required Field
14 | Malformed Entry
1885 | Makes No Sense
等但是假设 submission_reject_reasons
table 中有 5 个条目,其中 294(缺少必填字段)是 reject_reason_id
,并假设有 15 个条目,其中 1885(毫无意义)存在,和 120 个条目,其中存在 14 个(格式错误的条目)。我需要一个查询 returns 所有 reject_reasons
按它们在 submission_reject_reasons
(SRR) table 中的计数排序,降序排列,以便最常用的出现在排序中的较早位置.因此结果集将是:
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 table 中不存在原因,它应该有一个默认的“计数”为零 (0),但仍应在查询中返回。如果 2 个以上的原因计数并列,那么我不在乎它们是如何排序的。这里有什么想法吗?我需要最终结果集只包含 rr.id
和 rr.name
field/values.
我最好的尝试就是没有让我到任何地方:
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
不会 return 任何 submission_reject_reasons
中不存在的拒绝原因。