---
# System prepended metadata

title: 'Leetcode 練習 - 1729: Find Followers Count - SQL 解法解析'
tags: [更新上部落格]

---

# Leetcode 練習 - 1729: Find Followers Count - SQL 解法解析


![image](https://hackmd.io/_uploads/r1yEn-Vq1g.png)

## **📌 前言**
在社交媒體應用程式中，計算每位用戶的粉絲數是一個常見的需求，而這道 SQL 題目 **Leetcode 1729: Find Followers Count** 正是考察這個概念。這題主要測試 **GROUP BY** 和 **COUNT()** 聚合函數的應用，適合 SQL 初學者練習。本文將解析這題的解法，並探討進階做法。

---

## **📝 題目解析**
### **🔹 題目要求**
- 給定 `Followers` 資料表，該表包含 `user_id` 和 `follower_id`，表示 `follower_id` 是 `user_id` 的粉絲。
- 計算每位 `user_id` 擁有的粉絲數量。
- 結果需按照 `user_id` 升序排列。

### **🔹 輸入範例**
```sql
+---------+-------------+
| user_id | follower_id |
+---------+-------------+
| 0       | 1           |
| 1       | 0           |
| 2       | 0           |
| 2       | 1           |
+---------+-------------+
```

### **🔹 預期輸出**
```sql
+---------+----------------+
| user_id | followers_count|
+---------+----------------+
| 0       | 1              |
| 1       | 1              |
| 2       | 2              |
+---------+----------------+
```

### **🔹 解釋**
- `user_id = 0` 的粉絲有 `{1}`，共 1 位  
- `user_id = 1` 的粉絲有 `{0}`，共 1 位  
- `user_id = 2` 的粉絲有 `{0, 1}`，共 2 位  

---

## **💡 SQL 解法**

這題其實題目很簡單

### **🔹 解法 1：使用 `GROUP BY` 和 `COUNT()`**
這題的核心解法是使用 **GROUP BY** 來將 `user_id` 進行分組，並計算 `follower_id` 的數量。

#### **✅ SQL 語法**
```sql
SELECT
    user_id, COUNT(follower_id) AS followers_count
FROM
    Followers
GROUP BY
    user_id
ORDER BY
    user_id ASC;
```

#### **📌 解法解析**
1. **`GROUP BY user_id`**：對 `user_id` 進行分組，每個 `user_id` 是唯一的一行。
2. **`COUNT(follower_id)`**：計算 `follower_id` 的數量，即該 `user_id` 的粉絲數。
3. **`ORDER BY user_id ASC`**：按照 `user_id` 由小到大排序，符合題目要求。

#### **🔹 時間與空間複雜度分析**
- **時間複雜度：O(N)**（遍歷整個 `Followers` 表一次）
- **空間複雜度：O(1)**（結果集大小與 `user_id` 數量成正比）

---

## **🔍 進階討論**
### **🔹 如果 `Followers` 沒有某個 `user_id`，該怎麼處理？**
- 若 `Followers` 表沒有某個 `user_id`，代表該用戶 **沒有任何粉絲**，但這題沒要求回傳 `0`，所以不需要 `LEFT JOIN`。
- 但如果題目要求 **所有用戶都應該出現在結果中，即使沒有粉絲數也要顯示 `0`**，可以使用 `LEFT JOIN`。

#### **✅ 處理沒有粉絲的用戶 (`LEFT JOIN`)**
```sql
SELECT
    u.user_id,
    COUNT(f.follower_id) AS followers_count
FROM
    (SELECT DISTINCT user_id FROM Followers) u
LEFT JOIN Followers f
ON u.user_id = f.user_id
GROUP BY u.user_id
ORDER BY u.user_id ASC;
```
**這樣的作法確保了即使該 `user_id` 沒有粉絲，也會出現在結果中，粉絲數為 0。**

---

## **🎯 總結**
這道 SQL 題目考察 **GROUP BY** 和 **COUNT()** 兩個 SQL 聚合函數的應用。

**📌 核心 SQL**
```sql
SELECT
    user_id, COUNT(follower_id) AS followers_count
FROM
    Followers
GROUP BY
    user_id
ORDER BY
    user_id ASC;
```

**📌 進階解法**
- **如果用戶沒有粉絲但仍需出現在結果中** ➝ 使用 `LEFT JOIN`
- **Python Pandas 版** ➝ 使用 `groupby().size()`

**🎯 適合讀者**
✅ SQL 初學者：學習 `GROUP BY` 和 `COUNT()` 的基礎用法  
✅ 資料分析師：透過 SQL/Pandas 分析社群數據  
✅ 軟體工程師：優化社群媒體應用的粉絲數查詢  

希望這篇文章能幫助你理解 SQL 聚合函數的應用！🚀




###### tags: `更新上部落格`