 
- Peewee教程
- Peewee - 主页
- Peewee - 概述
- Peewee - 数据库类
- Peewee - 模型
- Peewee - 野外课程
- Peewee - 插入新记录
- Peewee - 选择记录
- Peewee - 过滤器
- Peewee - 主键和复合键
- Peewee - 更新现有记录
- Peewee - 删除记录
- Peewee - 创建索引
- Peewee - 约束
- Peewee - 使用 MySQL
- Peewee - 使用 PostgreSQL
- Peewee - 动态定义数据库
- Peewee - 连接管理
- Peewee - 关系与加入
- Peewee - 子查询
- Peewee - 排序
- Peewee - 计数和聚合
- Peewee - SQL 函数
- Peewee - 检索行元组/字典
- Peewee - 用户定义的运算符
- Peewee - 原子事务
- Peewee - 数据库错误
- Peewee - 查询生成器
- Peewee - 与 Web 框架集成
- Peewee - SQLite 扩展
- Peewee - PostgreSQL 和 MySQL 扩展
- Peewee - 使用 CockroachDB
- Peewee有用资源
- Peewee - 快速指南
- Peewee - 有用的资源
- Peewee - 讨论
Peewee - SQL 函数
美国国家标准协会 (ANSI) 结构化查询语言 (SQL) 标准定义了许多 SQL 函数。
像下面这样的聚合函数在 Peewee 中很有用。
- AVG() - 返回平均值。 
- COUNT() - 返回行数。 
- FIRST() - 返回第一个值。 
- LAST() - 返回最后一个值。 
- MAX() - 返回最大值。 
- MIN() - 返回最小值。 
- SUM() - 返回总和。 
为了实现这些 SQL 函数,Peewee 有一个 SQL 辅助函数 fn()。在上面的示例中,我们使用它来查找每个城市的记录数。
以下示例构建一个使用 SUM() 函数的 SELECT 查询。
使用前面定义的模型中的账单和项目表,我们将显示账单表中输入的每个项目的数量总和。
项目表
包含数据的项目表如下 -
| ID | 项目名 | 价格 | 
|---|---|---|
| 1 | 笔记本电脑 | 25000 | 
| 2 | 打印机 | 12000 | 
| 3 | 路由器 | 4000 | 
账单表
账单表如下 -
| ID | 商品编号 | 品牌ID | 数量 | 
|---|---|---|---|
| 1 | 1 | 3 | 5 | 
| 2 | 2 | 2 | 2 | 
| 3 | 3 | 4 | 5 | 
| 4 | 2 | 2 | 6 | 
| 5 | 3 | 4 | 3 | 
| 6 | 1 | 3 | 1 | 
例子
我们在 Bill 和 Item 表之间创建联接,从 Item 表中选择项目名称,并从 Bill 表中选择数量总和。
from peewee import *
db = SqliteDatabase('mydatabase.db')
class BaseModel(Model):
   class Meta:
      database = db
class Item(BaseModel):
   itemname = TextField()
   price = IntegerField()
class Brand(BaseModel):
   brandname = TextField()
   item = ForeignKeyField(Item, backref='brands')
class Bill(BaseModel):
   item = ForeignKeyField(Item, backref='bills')
   brand = ForeignKeyField(Brand,      backref='bills')
   qty = DecimalField()
db.create_tables([Item, Brand, Bill])
qs=Bill.select(Item.itemname, fn.SUM(Bill.qty).alias('Sum'))
   .join(Item).group_by(Item.itemname)
print (qs)
for q in qs:
   print ("Item: {} sum: {}".format(q.item.itemname, q.Sum))
db.close()
上面的脚本执行以下 SELECT 查询 -
SELECT "t1"."itemname", SUM("t2"."qty") AS "Sum" FROM "bill" AS "t2" 
INNER JOIN "item" AS "t1" ON ("t2"."item_id" = "t1"."id") GROUP BY "t1"."itemname"
输出
因此,输出如下 -
Item: Laptop sum: 6 Item: Printer sum: 8 Item: Router sum: 8