按相关记录的条件计数排序

时间:2015-02-13 02:46:53

标签: sql postgresql sql-order-by left-join aggregate-functions

一个quiz可以没有,一个或多个submissions。每个submission都有submissions.correct = tsubmissions.correct = f

什么是最好的Postgres 9.4查询来获取所有quizzes(无论他们是否有Submission),按照submissions与{correct = t的数量排序{1}} {1}} {}} {}} {/}} {}} {/}}

ASC

1 个答案:

答案 0 :(得分:1)

SELECT q.*, s.ct
FROM   quizzes q
LEFT   JOIN (
   SELECT quiz_id, count(*) AS ct
   FROM   submissions
   WHERE  correct
   GROUP  BY 1
   ) s ON s.quiz_id = q.id
ORDER BY s.ct NULLS FIRST;
  • 由于您需要所有测验,因此最快聚合并稍后加入可能是最快的。
  • 设为LEFT JOIN以保留测验而不在结果中提交。
  • NULLS FIRST在这里至关重要,因此首先没有任何(正确)提交的测验。
  • 与其他一些流行的RDBMS不同,Postgres有一个合适的boolean类型。表达式correct = tcorrect完全相同。