我正在尝试使用PostgreSQL创建一个报告,该报告列出了医生,特定问题的评分数以及这些评分的平均值作为一条记录。
我做了以下简单的查询:
select p.token, count(r.id), avg(a.val)
from xx.tb1 r
inner join xx.tb2 p using (id)
inner join xx.tb3 a using (id)
where a.question_id = 1
group by token
将连续的question_id添加到查询中的最有效方法是什么?我可以在多个select语句中使用相同的简单查询,但这似乎不是最有效的方法。工会将无法工作,因为我希望医生将数据分组。
谢谢!
答案 0 :(得分:0)
您只需将question_id添加为列即可。然后,当您有问题时,每位医生都会有尽可能多的行。
select p.token, a.question_id, count(r.review_id), avg(a.val_num_raw)
from xx.review r
inner join xx.predicate p using (predicate_id)
inner join xx.answer a using (review_id)
group by token, a.question_id
修改强> 根据您在下面的评论,你应该A)在像Excel这样的工具中转动你的数据(或者使用可以作为特征转动的MS SQL 2012)或者B)构建一个类似下面的可怕查询:
select q1.token, q1.cnt, q1.av, q2.cnt, q2.av, ...
FROM (
select p.token, count(r.review_id) as cnt, avg(a.val_num_raw) as av
from xx.review r
inner join xx.predicate p using (predicate_id)
inner join xx.answer a using (review_id)
where question_id = 1
group by token) q1
LEFT JOIN (
select p.token, count(r.review_id) as cnt, avg(a.val_num_raw) as av
from xx.review r
inner join xx.predicate p using (predicate_id)
inner join xx.answer a using (review_id)
where question_id = 2
group by token) q2 using (token)
LEFT JOIN (
select p.token, count(r.review_id) as cnt, avg(a.val_num_raw) as av
from xx.review r
inner join xx.predicate p using (predicate_id)
inner join xx.answer a using (review_id)
where question_id = 3
group by token) q3 using (token)
我会转向,因为这个查询的性能会很糟糕。