将 GROUPBY COUNT(*) 添加到 SQLAlchemy 中的 UNION ALL 查询 - 除了等效项
Add GROUPBY COUNT(*) to UNION ALL Query in SQLAlchemy - EXCEPT Equivalent
我有一个查询,它对 SQLAlchemy 中的两个 SELECT 语句执行 UNION ALL 操作。看起来像这样,
union_query = query1.union_all(query2)
我现在想做的是使用多个属性执行 GROUPBY,然后只获取 COUNT(*)
等于 1 的行。我该怎么做?
我知道我可以像这样进行 GROUPBY,
group_query = union_query.group_by(*columns)
但是,如何添加 COUNT(*)
条件?
因此,最终结果应该与此查询等价,
SELECT * FROM (
<query1>
UNION ALL
<query2>) AS result
GROUP BY <columns>
HAVING COUNT(*) = 1
另外,我也想知道是否可以从结果中只获取某列的不同值。那相当于这个,
SELECT DISTINCT <column> FROM (
<query1>
UNION ALL
<query2>) AS result
GROUP BY <columns>
HAVING COUNT(*) = 1
这些基本上是仅获取两个 SELECT 语句的唯一结果的查询。
注意:最简单的方法是使用 EXCEPT 或 EXCEPT ALL,但我的数据库是 运行 MariaDB 8,因此不支持这些操作。
对于第一个查询,请尝试以下 final_query
是您要 运行 的查询。
union_query = query1.union_all(query2)
group_query = union_query.group_by(*columns)
final_query = group_query.having(func.count() == 1)
对于第二个查询,请尝试以下操作。
union_query = query1.union_all(query2)
group_query = union_query.group_by(*columns)
subquery = group_query.having(func.count() == 1).subquery()
final_query = query(<column>, subquery).distinct()
参考资料
我有一个查询,它对 SQLAlchemy 中的两个 SELECT 语句执行 UNION ALL 操作。看起来像这样,
union_query = query1.union_all(query2)
我现在想做的是使用多个属性执行 GROUPBY,然后只获取 COUNT(*)
等于 1 的行。我该怎么做?
我知道我可以像这样进行 GROUPBY,
group_query = union_query.group_by(*columns)
但是,如何添加 COUNT(*)
条件?
因此,最终结果应该与此查询等价,
SELECT * FROM (
<query1>
UNION ALL
<query2>) AS result
GROUP BY <columns>
HAVING COUNT(*) = 1
另外,我也想知道是否可以从结果中只获取某列的不同值。那相当于这个,
SELECT DISTINCT <column> FROM (
<query1>
UNION ALL
<query2>) AS result
GROUP BY <columns>
HAVING COUNT(*) = 1
这些基本上是仅获取两个 SELECT 语句的唯一结果的查询。
注意:最简单的方法是使用 EXCEPT 或 EXCEPT ALL,但我的数据库是 运行 MariaDB 8,因此不支持这些操作。
对于第一个查询,请尝试以下 final_query
是您要 运行 的查询。
union_query = query1.union_all(query2)
group_query = union_query.group_by(*columns)
final_query = group_query.having(func.count() == 1)
对于第二个查询,请尝试以下操作。
union_query = query1.union_all(query2)
group_query = union_query.group_by(*columns)
subquery = group_query.having(func.count() == 1).subquery()
final_query = query(<column>, subquery).distinct()
参考资料