sql - 通过 postgres 中的连接表对行进行排序

标签 sql postgresql model left-join outer-join

我什至想不出正确的问题标题。我会采纳任何建议来编辑它。

我的问题:我有一个包含两个模型的应用程序(求职板):用户工作。用户可以有很多工作,工作可以是 premiumfree。作业也可以已过期有效。如果 valid_until 参数 IS NOT NULL 则它们是事件的,否则它们将过期(我有一个后台作业每天自动设置它)。

我正在尝试选择拥有活跃职位的用户,但我希望拥有高级职位的用户排在拥有免费职位的用户之前,假设用户可以同时拥有活跃的高级职位和免费职位。

SELECT DISTINCT users.id, users.email FROM users
LEFT OUTER JOIN jobs ON jobs.owner_id = users.id
WHERE jobs.valid_until IS NOT NULL;

上面的查询正确地选择了至少拥有一份活跃工作(高级或免费)的用户,我只需要根据工作表对用户进行排序。我将不胜感激任何帮助/提示。谢谢!

最佳答案

我相信以下会做你想做的事:

SELECT users.id, users.email FROM users
JOIN jobs ON jobs.owner_id = users.id
WHERE jobs.valid_until IS NOT NULL
GROUP BY users.id, users.email
ORDER BY min(case when jobs.type = 'premium' then 1 else 2 end)

我看不到包含 PremiumFree 的字段的名称,所以我编了一个!此外,我将您的 JOIN 更改为 INNER JOIN,因为 WHERE 子句在任何情况下都具有这种效果。

关于sql - 通过 postgres 中的连接表对行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44432192/

相关文章:

sql - PostgreSQL 中 50M+ 行表的聚合查询

Android SQLite 不自动递增

node.js - 放置在 Sequelize 中的 WHERE 子句中的值,PostgreSQL 以获取所有内容

php - 将 PHP 多维数组转换为 Postgres HStore

cocoa - 在 Cocoa 中正确设计模型 Controller ?

php - 不允许用户通过查询编辑数据库

mysql - sql查询的国际化

sql - 如何在where子句中使用column default来标识默认值

javascript - Backbone : Use Model's Data and Functions in View

view - Ember 不更新模型更改的 View