我有一个条件,我想选择一个随机用户,根据他们是否符合以下三个条件之一:
如果他们匹配邮政编码
如果它们与城市名称匹配
如果它们与州名匹配
如果其中一个匹配,则返回随机选择的结果。
基本上是这样的(~伪代码):

SELECT * FROM user
INNER JOIN address ON address.id = user.address_id
WHERE address.zipcode = '00000' IF EXISTS ELSE (
    WHERE address.province = 'State Name' IF EXISTS ELSE
        (WHERE address.city = 'City Name')
)
ORDER BY RANDOM() LIMIT 1;

有什么好的方法可以做到这一点,或者把它分成三个独立的查询更容易吗?

最佳答案

如果我理解正确,你需要一个优先顺序,从邮政编码开始。如果是:

SELECT u.*
FROM user u INNER JOIN
     address a
     ON a.id = u.address_id
WHERE a.zipcode = '00000' OR
      a.province = 'State Name' OR
      a.city = 'City Name'
ORDER BY (a.zipcode = '00000')::INT DESC,
         (a.province = 'State Name')::INT DESC,
         (a.city = 'City Name')::INT DESC,
         random();
LIMIT 1;

如果您只想让这三个选项中的任何一个匹配,并在其中进行随机选择,那么使用ORDER BY random()

关于sql - SQL:选择具有条件优先级的随机行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47552474/

10-15 21:25