Считать записи и объединять таблицы
У меня есть буксирные столы, к которым я хочу присоединиться
Trophy_lookup
таблица содержит
id | user_id | trophy_id
1 | 2 | 2
2 | 3 | 4
3 | 1 | 5
4 | 2 | 1
4 | 1 | 1
Users
таблица содержит общую информацию о пользователе
id | name | email
1 | john | john@webcom
2 | jacky | jacky@web.com
3 | Smith | smith@web.com
4 | Rob | rob@web.com
Проблема, которую я хочу присоединить users
а также trophy_lookup
таблица таким образом, чтобы я мог подсчитать, сколько трофеев выигрывает пользователь вместе с именем пользователя. Ниже приведен желаемый результат, которого я хочу достичь.
user_id| name | count(trophis)
1 | john | 2
2 | jacky| 2
Пока я пробовал много вещей, но я не могу достичь вышеупомянутых результатов. Я не очень хорош в написании запросов, поэтому, пожалуйста, помогите мне с этим. Спасибо
2 ответа
Решение
Попробуйте этот запрос
select a.id, a.name, count(*) as cnt
from table2 a
inner join
table1 b
on a.id = b.user_id
group by
a.id, a.name
having count(*) > 1
order by cnt
SQL FIDDLE:
| ID | NAME | CNT |
--------------------
| 2 | jacky | 2 |
| 1 | john | 2 |
Альтернативный подход
select a.name, b.*
from table2 a
inner join
(select a.id, count(*) as cnt
from table2 a
inner join
table1 b
on a.id = b.user_id
group by
a.id) b
ON a.id=b.id
where cnt > 1
SQL FIDDLE:
| NAME | ID | CNT |
--------------------
| john | 1 | 2 |
| jacky | 2 | 2 |
Попробуйте этот запрос:
SELECT u.id,count(u.id),u.name
FROM trophy_lookup t
JOIN users u ON t.user_id=u.id
GROUP BY u.id ;