我有两张桌子,image和gradeReason.每个图像被授予等级为它的质量和用户可以选择最多4倍不同的原因(reasonID_1,reasonID_2,reasonID_3,reasonID_4)通过使用选择reasonID.原因的细分存储在gradeReason表格中.
image
imageID auditID reasonID_1 reasonID_2 reasonID_3 reasonID_4
------- ------- ---------- ---------- ---------- ----------
1 123 1 13 7 3
2 124 8 13 8 6
4 125 3 2 5 6
5 125 7 4 2 3
gradeReason
reasonID category name
-------- -------- ----
1 exposure overexposed
2 exposure underexposed
3 patient patient moved
4 equipment sensor too big
5 equipment sensor too small
Run Code Online (Sandbox Code Playgroud)
我想要的是一个查询,它将返回每个reasonID在审计中使用的次数以及gradeReason的名称是什么
例如
审计125 -
reasonID 3被使用了两次 - 名字'病人感动',
reasonID 2使用了两次 - 名称为"曝光不足".
我会诚实地说,我已经挣扎了好几天,我甚至不知道从哪里开始.
这更难,因为您的数据未正确规范化.以下方法首先规范化数据,然后进行连接和聚合:
select ir.auditId, gr.ReasonId, gr.category, gr.name, count(*) as cnt
from (select i.imageID, i.auditID,
(case when n.n = 1 then ReasonID_1
when n.n = 2 then ReasonID_2
when n.n = 3 then ReasonID_3
when n.n = 4 then ReasonID_4
end) as ReasonId
from image i cross join
(select 1 as n union all select 2 union all select 3 union all select 4
) n
) ir join
gradeReason gr
on ir.ReasonId = gr.ReasonId
group by ir.auditId, gr.ReasonId, gr.category, gr.name
order by cnt desc;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |