我想为列的每个不同值选择一行.在这里,我想执行它col1:
| ID | COL1 | COL2 |
--------------------
| 1 | 0 | 0 |
| 2 | 0 | 1 |
| 3 | 1 | 11 |
| 4 | 1 | 12 |
| 5 | 1 | 16 |
Run Code Online (Sandbox Code Playgroud)
结果如下:
| ID | COL1 | COL2 |
--------------------
| 1 | 0 | 0 |
| 3 | 1 | 11 |
Run Code Online (Sandbox Code Playgroud)
as 0和1是不同的值col1.我不确定返回哪一行(例如,不需要id的最小值),只要返回不同的列值即可.
请假设调用模型TestModel并且所有内容都已完全映射.
您需要使用子查询.而且你必须选择MIN或MAX运作:
SELECT * FROM TestModel
WHERE ID IN(SELECT MIN(id)
FROM TestModel
GROUP BY col1)
Run Code Online (Sandbox Code Playgroud)
输出:
| ID | COL1 | COL2 |
--------------------
| 1 | 0 | 0 |
| 3 | 1 | 11 |
Run Code Online (Sandbox Code Playgroud)
SA版解决方案:
subq = (session.query(func.min(TestModel.id).label("min_id")).
group_by(TestModel.col1)).subquery()
qry = (session.query(TestModel).
join(subq, and_(TestModel.id == subq.c.min_id)))
Run Code Online (Sandbox Code Playgroud)
这将为列TestModel的每个不同值返回对象TestModel.col1,就像GROUP BYSQL 中的查询一样。
session.query( TestModel).group_by( TestModel.col1).all()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6227 次 |
| 最近记录: |