SQL:在两个表之间具有多个条件平均值

时间:2019-10-28 10:31:13

标签: sql postgresql

我有两个桌子

例如来自T1

----------------------
ID  || Operation Name |
----------------------|
101 || QA             |
----------------------

来自T 2的样本

----------------------------------------
ID  || Employee  ID || Employee || Audit |
----------------------------------------
101 || 505788       || Marley   || 50    |
230 || 5487525      || Smith    || 100   |
-----------------------------------------

我应该在条件下返回每个操作名称及其自身的审计平均值(如果> = 90为“好”-如果<90且> = 40为“中”-如果<40为“差”),并且阻止任何平均(0)的审核

桌子应该是这样的

---------------------------------------------------
Operation Name || Operation ID || Audit Evaluation |
----------------------------------------------------
Maintenance    ||   190        ||       Medium     |
---------------------------------------------------

1 个答案:

答案 0 :(得分:0)

demo:db<>fiddle

SELECT
    t1.name AS operation_name,
    t1.id AS operation_id,
    CASE 
        WHEN AVG(t2.audit) >= 90 THEN 'Good'
        WHEN AVG(t2.audit) >= 40 THEN 'Medium'
        ELSE 'Bad'
    END AS audit_evaluation
FROM
    t1
JOIN
    t2 ON t1.id = t2.id
GROUP BY t1.id, t1.name
HAVING AVG(t2.audit) > 0
  1. id上联接两个表
  2. 按他们的id分组
  3. HAVING过滤出AVG = 0个组
  4. 计算AVG
  5. 使用CASE子句构建各节