【问题标题】:group by clause flask alchemy按条款分组烧瓶炼金术
【发布时间】:2022-01-11 14:20:33
【问题描述】:
sample = {
        '13-18':50,
        '19-25':60,
        '25-40':50,
        '50-80':100

    }

我想找到属于上述类别的用户数量,即分别从年龄13-18, 19-25 开始,我将如何使用 SQLalchemy 进行查询,我只有 出生日期 可以使用的字段

dob : 07/10/2005

DOB 就是上面提到的格式

【问题讨论】:

    标签: sql flask sqlalchemy


    【解决方案1】:

    您应该添加更多详细信息。你的数据库是什么(postres,mysql,其他?)?根据 DB,有不同的内置函数集。 dob 的列类型是什么?它是字符串还是日期时间。 在 postgreSQL 中,您的实现可能是:

    select 
    case 
        when age < 13 then '0-12'
        when age >= 13 and age < 25 then '13-25'
        when age >= 25 and age < 40 then '25-40'
        when age >= 41 and age < 80 then '41-80'
        else '80+'
    end as range,
    count(*)
    from (
      SELECT 
      1 + extract('years' from justify_interval(now() - to_date(dob, 'DD/MM/YYYY'))) as age 
      from table
    ) x
    group by range
    

    您可以将其重写为 sqlalchemy 语法,但这很棘手。您还可以在 sqlalchemy 中使用原始 sql 执行,例如:

    from sqlalchemy.sql import text
    
    statement = text(<sql_above>)
    result = session.execute(statement)
    

    【讨论】:

    • 我的数据库是PostgreSQL,dob 有DD/MM/YYYY 格式的日期,我假设它的字符串来自MongoDB,@jorzel
    • 所以这个解决方案应该适合你,它适用于 postgres。
    • 是的,你是圣人 @jorzel 只需要替换 table name