Tác giả: Lê Trung Kiên lớp java 08
Email: lekien.2803.cg@gmail.com
SĐT: 0942096947
Link bài toán: https://leetcode.com/problems/find-followers-count/
1. Mở đầu
Xin chào các bạn, mình viết ra bài viết này để chia sẻ phương pháp giải cũng như tư duy của mình về bài toán này của leetcode. Phương pháp của mình có thể không phải là tối ưu nhất, tuy nhiên mình sẽ phân tích, chia nhỏ bài toán ra thành các module nhỏ hơn để dễ giải quyết cũng như giúp các bạn hiểu được các yêu cầu mà bài toán đưa ra.
2. Đề bài
Cho bảng Followers
:
+-------------+------+
| Column Name | Type |
+-------------+------+
| user_id | int |
| follower_id | int |
+-------------+------+
(user_id, follower_id) là cặp khóa chính của bảng.
Bảng này chứa ID của người dùng và người theo dõi trong ứng dụng mạng xã hội nơi mọi người có thể theo dõi nhau.
Viết truy vấn SQL, đối với mỗi người dùng, sẽ trả về số lượng người theo dõi.
Trả về bảng kết quả sắp xếp user_id
theo thứ tự tăng dần.
Định dạng kết quả truy vấn nằm trong ví dụ sau.
Ví dụ:
Input:
Followers table:
+---------+-------------+
| user_id | follower_id |
+---------+-------------+
| 0 | 1 |
| 1 | 0 |
| 2 | 0 |
| 2 | 1 |
+---------+-------------+
Output:
+---------+----------------+
| user_id | followers_count|
+---------+----------------+
| 0 | 1 |
| 1 | 1 |
| 2 | 2 |
+---------+----------------+
Explanation:
The followers of 0 are {1}
The followers of 1 are {0}
The followers of 2 are {0,1}
3. Phân tích
Ok, bài này không khó lắm đâu các bạn. Họ yêu cầu chúng ta đếm số người theo dõi của mỗi user_id
trong bảng. Để đếm số lượng bản ghi thì ta dùng hàm COUNT()
.
Sau khi đã đếm được số lượng người theo dõi không trùng lặp của mỗi user_id
thì ta phải sắp xếp kết quả dựa theo user_id
theo thứ tự tăng dần. Để sắp xếp được thì trước hết ta phải nhóm cúng lại với nhau bằng mệnh đề GROUP BY
, sau đó sử dụng ORDER BY
để sắp xếp, kèm theo đó là từ khóa ASC
để sắp xếp theo thứ tự tăng dần.
4. Code chạy luôn cho nóng
Code của chúng ta sẽ như sau:
select user_id, count(follower_id) followers_count
from followers
group by user_id
order by user_id asc
5. Kết thúc
Qua bài viết này, mình đã chia sẻ cho các bạn cách mình tư duy khi giải bài tập trên leetcode. Hi vọng bài viết giúp ích cho các bạn trong cách tư duy để giải các bài tập khác. Xin cám ơn các bạn đã dành thời gian đọc và theo dõi. Peace!!!
Bình luận