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à cp khóa chính ca bng.
Bng này cha ID ca người dùng và người theo dõi trongng dng mng xã hi nơi mi người có ththeo 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!!!