SQLAlchemy总和为true

meai2312

我有下面的表格,想要计算sumtrue和group_by按日期

| Date       | Value1      | Value2       |
|:-----------|------------:|:------------:|
| 2019-12-05 |        5.5  |     true|
| 2019-12-05 |        4.5  |     true|
| 2019-12-05 |        6.5  |     false|
| 2019-12-05 |        8.5  |     false|
| 2019-12-05 |        2.5  |     true|
| 2019-12-06 |        3.5  |     true|
| 2019-12-06 |        5.5  |     true|
| 2019-12-06 |        56.5 |    true|
| 2019-12-06 |        8.5  |     true|
| 2019-12-06 |        99.5 |     false|
| ...        |        ...  |     ...      |

我通过类方法对db.Model的查询:

return db.session.query(cls.Date, func.count(cast(cls.Value2, sqlalchemy.Integer)).filter(cls.Value2== True).label("Count True Value2")) \
    .group_by(cls.Date)\
    .order_by("Date")

结果应该是

   | Date       | Value2     |
    |:-----------|------------:|
    | 2019-12-05 |        3  |     
    | 2019-12-06 |        4  |

编辑也不起作用

  return db.session.query(cls.Date, func.sum(case([(cls.Value2== True, 1)], else_=0).label('Value2'))) \
            .filter(cls.Date== current_date.strftime("%Y-%m-%d")) \
            .group_by(cls.Date)\
            .order_by("Date")  
Danila Ganchar
  • 您需要添加Value2到组条件。

这是一个例子:

from datetime import date

from sqlalchemy import Integer
from sqlalchemy import func
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy import Column, Date, Boolean
from sqlalchemy.orm import sessionmaker

Base = declarative_base()
engine = create_engine('...creds...', echo=True)


class TestModel(Base):
    __tablename__ = 'test_model'
    id = Column(Integer, primary_key=True)
    date = Column(Date)
    value2 = Column(Boolean)


Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
# a few test records
for date_ in (date(2020, 1, 1), date(2020, 1, 2)):
    session.add(TestModel(date=date_, value2=True))
    session.add(TestModel(date=date_, value2=True))
    session.add(TestModel(date=date_, value2=True))
    session.add(TestModel(date=date_, value2=False))

session.commit()

query = (
    session.query(
        TestModel.date,
        TestModel.value2,
        func.count('*').label('counter')
    )
    # uncomment if you need only True values
    # .filter(TestModel.value2.is_(True))
    .group_by(TestModel.date, TestModel.value2)
    .order_by(TestModel.date)
)

for rec in query:
    print('date {date}, value2 {value2}, counter {counter}'.format(
        date=rec.date,
        value2=rec.value2,
        counter=rec.counter,
    ))

# date 2020-01-01, value2 True, counter 3
# date 2020-01-01, value2 False, counter 1
# date 2020-01-02, value2 False, counter 1
# date 2020-01-02, value2 True, counter 3

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何计算以 TRUE 和 FALSE 为条件的运行总和

来自分类Dev

红宝石:加和并在21为总和时打印true

来自分类Dev

真相表。以所需格式为每一行打印每个True值的总和

来自分类Dev

计算最低为零的累计总和(总和)

来自分类Dev

如果总和为负,则返回组的总和

来自分类Dev

sqlalchemy结合分组行的总和和计数

来自分类Dev

2个日期之间的列的SQLAlchemy总和

来自分类Dev

总和显示为空白值

来自分类Dev

每月的总和(以毫秒为单位)

来自分类Dev

删除总和为零的行

来自分类Dev

取r中TRUE / FALSE向量的总和

来自分类Dev

最大子数组总和,使得总和为奇数

来自分类Dev

[] ==![]评估为true

来自分类Dev

protectedDataAvailable始终为true

来自分类Dev

NullBooleanField始终为True

来自分类Dev

为什么(true && {})评估为{},而({} && true)评估为true?

来自分类Dev

空小时的dplyr的小时总和为零

来自分类Dev

找到总和为给定值的最小素数

来自分类Dev

查找两对总和为相同值的对

来自分类Dev

SUM升序排列,以总和为上限

来自分类Dev

MongoDB组和以ID为键的总和

来自分类Dev

查找多个变量的总和为1

来自分类Dev

删除给定键总和为零的行

来自分类Dev

总和为k的子矩阵数

来自分类Dev

使用javascript计算时总和为零

来自分类Dev

求出最小总和为n的alldifferent数组

来自分类Dev

在Django中为项目注释投票总和

来自分类Dev

分类总和为R gtsummary的行

来自分类Dev

Javascript减少为整数数组的总和