根据table2中最高的COUNT(*)加入两个表?

时间:2015-02-13 16:21:01

标签: mysql sql join

好的,我有两个表需要与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链接两个表?

4 个答案:

答案 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 表(idgroup 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,加上按喜好排序的#降序将导致获得一个用户 - 匹配最多的用户。