题目
手写 SQL:有一张订单表,status 字段表示某个订单的状态,如何查询出各个状态的百分比
答案
假设有一张订单表:
```sql
CREATE TABLE orders (
id INT PRIMARY KEY,
status INT
);
```
查询出各个状态的百分比:
```sql
SELECT
status,
COUNT(*) AS cnt,
ROUND(COUNT(*) * 100 / (SELECT COUNT(*) FROM orders), 2) AS percent
FROM
orders
GROUP BY
stats;
```
**重点就在于使用子查询 `SELECT COUNT(*) FROM orders` 来获取整张表的总行数,如果直接用 `COUNT(*)` 获取到的是每个分组的总行数**。
