mysql - SQLAlchemy ORM 查询加入聚合子查询
问题描述
我有一个 SQL 查询:
SELECT d.device_name, d.device_category
FROM devices d
JOIN (
SELECT device_category, COUNT(*) AS cnt FROM devices GROUP BY device_category
) c ON c.device_category = d.device_category
ORDER BY c.cnt DESC
现在我需要以 SQLAlchemy ORM 格式编写它(至少,我愿意)。
我的尝试是这样的:
sub_dquery = db.session.query(Devices.device_category, func.count('*')).group_by(Devices.device_category).subquery()
long_dquery = db.session.query(Devices.device_name, Devices.device_category).join(sub_dquery).desc()
我不知道如何实现这部分:
c ON c.device_category = d.device_category
解决方案
这看起来非常接近:
with Session(engine) as session:
sub_dquery = (
session.query(Devices.device_category, func.count().label("cnt"))
.group_by(Devices.device_category)
.subquery("c")
)
long_dquery = (
session.query(Devices.device_name, Devices.device_category)
.join(sub_dquery, sub_dquery.c.device_category == Devices.device_category)
.order_by(sub_dquery.c.cnt.desc())
)
print(long_dquery)
"""
SELECT devices.device_name AS devices_device_name, devices.device_category AS devices_device_category
FROM devices
JOIN (
SELECT devices.device_category AS device_category, count(*) AS cnt
FROM devices GROUP BY devices.device_category
) AS c ON c.device_category = devices.device_category
ORDER BY c.cnt DESC
"""
推荐阅读
- swift - 快速使用带有 Class 或 Struct 的 VIPER 架构?
- google-apps-script - Google Apps 脚本:“无法访问的服务:镜像”错误
- python - 在 Team Drive 和 Colab 中创建新电子表格时未找到 Gspread 文件错误
- mysql - 连接到我的在线 mysql 数据库 (phpmyadmin)
- r - 使用 coeftest() 和异方差的 R 中面板数据的双聚类标准(时间和组)误差
- node.js - 如何在 Meteor 中使用带有 socket.io 的 ssh2 确保单个私有 ssh 连接
- postgresql - POSTGRESQL:如果具有相同的条件,则使用相同的数字枚举
- python - 如何在 Python-3.7 中修复 Tkinter?
- arrays - 为什么 - 会以正数返回正数?
- html - 我正在使用箭头键(向上,向下)导航 html,焦点将转到每个 div 元素。我想跳过html页面中一个div元素的焦点