id teacher_id subject_id subject_parent_id title price lesson_num cover buy_count view_count version status is_deleted gmt_create gmt_modified 这是课程表的字段 id title parent_id sort gmt_create gmt_modified这是科目表的字段 科目是二级分类 查询 课程科目的title和所占所有课程的百分比
时间: 2023-08-18 10:03:58 浏览: 48
可以使用以下SQL语句查询:
```
SELECT s.title, CONCAT(FORMAT(COUNT(c.id) / t.total * 100, 2), '%') AS percentage
FROM subject s
LEFT JOIN (
SELECT parent_id, COUNT(id) AS total
FROM subject
GROUP BY parent_id
) t ON s.id = t.parent_id
LEFT JOIN course c ON s.id = c.subject_id
WHERE s.parent_id IS NOT NULL
GROUP BY s.id
ORDER BY percentage DESC;
```
其中,`subject`表示科目表,`course`表示课程表。这条SQL语句首先进行了左连接(LEFT JOIN)操作,将科目表和课程表按照科目ID关联起来。然后,使用子查询(subquery)统计每个二级科目下的课程总数。接着,使用GROUP BY对科目ID进行分组,统计每个科目所占的所有课程数,并计算出百分比。最后,使用ORDER BY按照百分比降序排列。
相关问题
pymongo根据多个_id删除多个文档
你可以使用`delete_many()`方法来删除多个文档,其中可以传入一个字典作为筛选条件。要根据多个`_id`删除多个文档,可以将多个`_id`组成一个列表,然后使用`$in`操作符进行筛选。以下是一个示例代码:
```python
import pymongo
# 假设要删除的多个_id存储在一个列表中
id_list = [ObjectId('id1'), ObjectId('id2'), ObjectId('id3')]
# 创建MongoDB连接
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client['testdb']
collection = db['testcollection']
# 删除多个文档
result = collection.delete_many({'_id': {'$in': id_list}})
print(result.deleted_count)
```
上述代码中,`id_list`列表中存储了多个`_id`,`delete_many()`方法的筛选条件为`{'_id': {'$in': id_list}}`,表示删除`_id`在`id_list`中的文档。`result.deleted_count`表示实际删除的文档数量。
pymongo根据_id删除文档
可以使用以下代码删除指定_id的文档:
```python
from pymongo import MongoClient
client = MongoClient()
# 选择数据库和集合
db = client['database_name']
collection = db['collection_name']
# 删除指定_id的文档
result = collection.delete_one({'_id': ObjectId('指定的id值')})
print(result.deleted_count) # 输出删除的文档数量
```
其中,`delete_one`方法用于删除满足条件的第一个文档,如果需要删除满足条件的所有文档,可以使用`delete_many`方法。`ObjectId`是`pymongo`中用于表示文档唯一标识符的对象,需要导入`bson`模块中的`ObjectId`类。