通过 postgres 中的连接表对行进行排序
Ordering rows by joined tables in postgres
我什至很难想出正确的问题标题。我会采纳任何建议来编辑它。
我的问题:我有一个包含两个模型的应用程序(工作板):User、Job。用户可以有很多工作,工作可以是 premium
或 free
。职位也可以 expired 或 active。如果 valid_until
参数 IS NOT NULL
,它们是活动的,否则它们就会过期(我有一个后台作业每天自动设置它)。
我正在尝试 select 拥有活跃工作的用户,但我希望 拥有高级工作的用户排在拥有免费工作的用户之前 假设用户可以同时拥有两个高级工作和免费职位发布。
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;
以上正确查询 selects 用户至少有一份活跃的工作(高级或免费),我只需要根据工作对用户进行排序 table。我将不胜感激 help/hint。谢谢!
我相信以下内容会如您所愿:
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)
我看不到包含 Premium
和 Free
的字段的名称,所以我编了一个!此外,我将您的 JOIN
更改为 INNER JOIN
,因为 WHERE
子句在任何情况下都具有这种效果。
我什至很难想出正确的问题标题。我会采纳任何建议来编辑它。
我的问题:我有一个包含两个模型的应用程序(工作板):User、Job。用户可以有很多工作,工作可以是 premium
或 free
。职位也可以 expired 或 active。如果 valid_until
参数 IS NOT NULL
,它们是活动的,否则它们就会过期(我有一个后台作业每天自动设置它)。
我正在尝试 select 拥有活跃工作的用户,但我希望 拥有高级工作的用户排在拥有免费工作的用户之前 假设用户可以同时拥有两个高级工作和免费职位发布。
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;
以上正确查询 selects 用户至少有一份活跃的工作(高级或免费),我只需要根据工作对用户进行排序 table。我将不胜感激 help/hint。谢谢!
我相信以下内容会如您所愿:
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)
我看不到包含 Premium
和 Free
的字段的名称,所以我编了一个!此外,我将您的 JOIN
更改为 INNER JOIN
,因为 WHERE
子句在任何情况下都具有这种效果。