我正在开发类似app的tinder,我想获取所有比赛。在我的比赛表中,每个用户都有它自己的条目。所以对于一个比赛,有两个用户,并且表中总共有两个条目。
我尝试了如下所示的sql查询
select user_id, friend_id from matches where is_match = 1 group by user_id,friend_id
与查询我得到以下结果 `
|--------------------------|
|user_id|friend_id|is_match|
|--------------------------|
| 23 | 24 | 1 |
|--------------------------|
| 24 | 23 | 1 |
|--------------------------|
| 24 | 25 | 1 |
|--------------------------|
| 25 | 24 | 1 |
|--------------------------|
| 25 | 26 | 1 |
|--------------------------|
| 26 | 25 | 1 |
---------------------------
`
我想要这样的结果。
`
|--------------------------|
|user_id|friend_id|is_match|
|--------------------------|
| 23 | 24 | 1 |
|--------------------------|
| 24 | 25 | 1 |
|--------------------------|
| 25 | 26 | 1 |
|--------------------------|
`
答案 0 :(得分:2)
通过对user_id
和friend_id
值进行排序,然后仅选择DISTINCT
对,可以获得所需的结果。请注意,不需要GROUP_BY
。
SELECT DISTINCT LEAST(user_id, friend_id) AS user1, GREATEST(user_id, friend_id) AS user2
FROM matches
WHERE is_match = 1
答案 1 :(得分:0)
如果每对总是有两行,那么一个简单的解决方案是:
spark.sparkContext.getConf().getAll()
使用SELECT user_id, friend_id
FROM matches
WHERE is_match = 1 AND
user_id < friend_id;
(或SELECT DISTINCT
)会使查询更加昂贵。