Как сделать пересечение 2 запросов в MySQL - PullRequest
0 голосов
/ 24 января 2019

у меня 3 таблицы 1. пользователи

name      surname  id     birthdate
Lowell    Bishop    1   1981-05-19
Rodney    Miller    2   1968-01-15
Binyamin  Boone     3   1991-12-21

2.друзья

userid1 userid2  timestamp
1       2      2018-12-03 20:11:03
1       3      2018-02-02 05:36:32
2       3      2018-01-16 02:50:08

3. лайки

userid  postid   timestamp
1   4   2018-05-15 21:38:52
2   195 2018-11-17 09:28:43
3   252 2018-10-26 07:08:12

Я получил 2 запроса

/ Запрос на получение пользователей, у которых более 5 друзей в марте 2018 года /

SELECT  count(u1.id) as friends_count,
u1.id, u1.name,u1.surname FROM users u1
INNER JOIN friendships f ON f.userid1 = u1.id
INNER JOIN users u2 ON u2.id = f.userid2 
where f.timestamp >= '2025-03-01' and f.timestamp <= '2025-03-31' 
group by u1.id
having count(f.userid1) >= 5 
order by u1.id;

/ Запрос на получение пользователей, у которых более 5 лайков в марте 2018 года /

SELECT count(u1.id) as likes_count,u1.id, u1.name,u1.surname FROM users u1
INNER JOIN likes l ON u1.id = l.userid
where l.timestamp >= '2025-03-01' and l.timestamp <= '2025-03-31' 
group by u1.id
having count(u1.id) >= 5
order by u1.id;

Как пересечь эти 2 запроса в 1?Я использую MySQL, поэтому пересечение выдает ошибку.Я пытаюсь получить эти результаты в 1 таблице, что-то вроде этого:

friends_count   likes_count   id   name    surname
5               4             78   Joselyn   Lynn

1 Ответ

0 голосов
/ 24 января 2019

Вы можете попробовать ниже - используя подзапрос

select * from
(
SELECT  count(u1.id) as friends_count,
u1.id, u1.name,u1.surname FROM users u1
INNER JOIN friendships f ON f.userid1 = u1.id
INNER JOIN users u2 ON u2.id = f.userid2 
where f.timestamp >= '2025-03-01' and f.timestamp <= '2025-03-31' 
group by u1.id
having count(f.userid1) >= 5 
)A inner join 
(
SELECT count(u1.id) as likes_count,u1.id, u1.name,u1.surname FROM users u1
INNER JOIN likes l ON u1.id = l.userid
where l.timestamp >= '2025-03-01' and l.timestamp <= '2025-03-31' 
group by u1.id
having count(u1.id) >= 5
)B on A.ud=B.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...