好的,我有两个表需要与JOIN
查询链接在一起。有一个名为likes的表和一个名为users的表。 users表看起来像这样
id name
----- ------
1 Mark
2 Mike
3 Paul
4 Dave
5 Chris
6 John
喜欢的表看起来像这样。
user_one user_two match_id
----- ------ --------
1 2 abc
2 1
1 3 acc
3 1 abb
1 5 aee
5 1
预期结果应为
id name
----- ------
1 Mark
这两个表应仅链接到likes表中的行,其中users_one列设置为该列中最常见的值。在这种情况下,id
1
user_one
的用户在match_id
列中的SELECT users.*, likes.COUNT(*) AS count
FROM users
JOIN likes
ON users.id = likes.user_one
WHERE likes.match_id != ''
列,其中{{1}}不为空。
我认为要写出像这样的东西
{{1}}
但是,我知道这不是正确的。有没有办法只在一个表中最常见的行上用JOIN链接两个表?
答案 0 :(得分:1)
分组会为你需要的东西工作吗?
SELECT users.id, users.name, count(*) AS count
FROM users
JOIN likes
ON users.id = likes.user_one
WHERE likes.match_id != ''
group by users.id, users.name
应该给你类似的东西
1 Mark 3
答案 1 :(得分:0)
尝试:
select *
from users
where id in (
select id
from likes
group by id
order by count(*) desc, id
limit 1
)
子查询返回 likes 表(id
和group by id
)中出现次数最多的行的order by count(*) desc
。我已将id
添加到order by
,以便在有多个具有相同出现次数的情况下提供可预测的结果。这用于连接用户表以提供所需的结果集。
答案 2 :(得分:0)
如果我理解了这个问题,应该是这样的。
select top 1 user_one, name
from likes
inner join users ON users.id = likes.user_one
where match_id != ''
group by user_one
order by count(*) Desc
答案 3 :(得分:0)
你在找这样的东西吗?
select u.id, u.name, count(*)
from users u
inner join likes l
on l.id = l.user_one and l.match_id != ''
group by u.id, u.name
order by count(*) desc
limit 1
limit 1
,加上按喜好排序的#降序将导致获得一个用户 - 匹配最多的用户。