Spe*_*cer 2 sql postgresql join case distinct
每个帐户都与一个人和一种帐户相关联.我想选择一个不同的帐户子集.为了被选中,帐户满足两个标准中的至少一个.如果帐户出现两次
我想根据两个不同的字段来订购这个结果集.这是我的尝试:
Select DISTINCT a.*
FROM people AS p
JOIN accounts AS a
ON a.people_id = p.id
JOIN type_account AS t
ON t.type_id = a.id
WHERE t.id IN(1,3,5)
OR p.id IN(2,4,6)
ORDER BY(CASE
WHEN p.id IN(2,4,6) THEN p.updated_at
WHEN t.id IN(1,3,5) THEN p.created_at) AS position
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误: SELECT DISTINCT, ORDER BY expressions must appear in select list
如果我将case语句移动到select,那么一个帐户(与不同的人相关联)可能会在结果中出现两次,即在满足第一个where子句时出现一次,在满足第二个where子句时出现两次.在这种情况下,帐户将在结果集中出现两次.
我无法绕着这个缠绕我的头.任何帮助,将不胜感激 :)
将CASE语句移动到SELECT子句中,然后按其位置排序:
SELECT
CASE
WHEN p.id IN(2,4,6) THEN p.updated_at
WHEN t.id IN(1,3,5) THEN p.created_at
END AS position,
DISTINCT a.*
FROM people AS p
JOIN accounts AS a
ON a.people_id = p.id
JOIN type_account AS t
ON t.type_id = a.id
WHERE t.id IN(1,3,5)
OR p.id IN(2,4,6)
ORDER BY 1 DESC
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1575 次 |
| 最近记录: |