【发布时间】:2012-12-12 05:34:19
【问题描述】:
我有两个表:user 和 projects,两者之间存在一对多关系。projects 表的字段 status 包含用户的项目状态。
status 可以是以下之一:
launched, confirm, staffed, overdue, complete, failed, ended
我想将用户分为两类:
- 项目处于
launched阶段的用户 - 具有
launched状态以外的项目的用户。
我正在使用以下查询:
SELECT DISTINCT(u.*), CASE
WHEN p.status = 'LAUNCHED' THEN 1
ELSE 2
END as user_category
FROM users u
LEFT JOIN projects p ON p.user_id = u.id
WHERE (LOWER(u.username) like '%%%'
OR LOWER(u.personal_intro) like '%%%'
OR LOWER(u.location) like '%%%'
OR u.account_status != 'DELETED'
AND system_role=10 AND u.account_status ='ACTIVE')
ORDER BY set_order, u.page_hits DESC
LIMIT 10
OFFSET 0
我正面临以下情况的重复记录:
如果用户有状态为launched 以及overdue、complete 或failed 的项目,则该用户被记录两次,因为CASE 中的两个条件都满足该用户。
请提出一个查询,其中任何项目处于launched 状态的用户将其user_category 设置为1。 user_category 2 不应重复使用同一用户。
【问题讨论】:
-
distinct不是函数。
标签: sql postgresql greatest-n-per-group operator-precedence rails-postgresql