subquery - 选择子查询peewee
问题描述
我想知道我是否可以在 sub_query 上执行 select()。我可以使用任何 peewee.Model 加入 sub_query。但是当我写了一个 sub_query 并且我想只用其中一个列分组时
e.g. sub_query.select(sub_query.c.column_1, fn.COUNT(sub_query.c.column2)alias('col2_count')).group_by(sub_query.c.column_1)
查询未嵌套并给出 SQL 语法错误。
(不能透露代码)(我在 sub_query 上做了 alias())
编辑
例子:
class Product(Model):
id = PrimaryKeyField()
name = CharField()
created_date = DateField()
class Part(Model):
id = PrimaryKeyField()
product = ForeignKeyField(Product)
name = CharField()
class ProductError(Model):
id = PrimaryKeyField()
product = ForeignKeyField(Product)
note = CharField()
class PartError(Model):
id = PrimaryKeyField()
part = ForeignKeyField(Part)
error = ForeignKeyField(ErrorMaster)
这里产品可能有一般错误,部分可能有特定错误,这些错误是在 ErrorMaster 中预定义的
我只想知道对总产品日期有错误的产品数量。(错误是产品错误或任何部分的错误)
所以 sub_query 类似于
sub_q = Product.select(
Product.created_date,
Product.id.alias('product_id'),
fn.IF(# checks if product has error
ProductError.is_null(True), if no product error check part error
fn.IF(fn.COUNT(PartError.id) == 0, 0, 1), # checks if error count > 0 then there is error in part
1
).alias('is_error')
).join(Part, on=Product.id == Part.product)
.join(ProductError, JOIN_LEFT_OUTER, on=Product.id == ProductError.product)
.join(PartError, JOIN_LEFT_OUTER, on=PartError.part == Part.id)
.where(Product.created_date.between(from_date, to_date))
.group_by(Product.id).alias('some_alias')
# below does not work but I can do this in sql
query = sub_q.select(sub_q.c.created_date,
fn.COUNT(sub_q.c.product_id).alias('total_products'),
fn.SUM(sub_q.c.is_error).alias('product_with_errors'))
.group_by(sub_q.c.created_date)
解决方案
推荐阅读
- performance - 调度不同缓存名称的性能和影响
- esp8266 - 如何知道 ESP8266 上的 spiffs 分区中剩余多少空间?
- dart - List.map 是否保证保留原始列表的排序顺序?
- java - 由于未找到类错误,无法使用 bat 文件运行 Java 文件
- git - 使用 Azure DevOps Git 配置的 DataFactory 的 Azure ARM 模板部署
- javascript - 如何使用 json 和烧瓶将字符串数据从 pandas 数据帧传递到 google.visualization.DataTable
- excel - 如何在Excel之前添加空格和双倍数字以及更改测量单位
- macos - 排毒 - 测试 | 安卓 | ChildProcessError:命令失败
- django - Auth0:如何使用带有 React 前端的 M2M 令牌提交 POST
- javascript - 如何禁用 WordPress 通过附件页面显示 XML 内容?