【发布时间】:2016-12-03 12:42:11
【问题描述】:
如何在与供应商无关的 SQL 代码中计算条件概率,同时仅读取一次预先计算的表(直方图)?
假设我们有一个返回直方图关系的查询。 直方图包含以下属性:{x, y, cnt},其中cnt 是名义属性 x 和 y 的出现次数。 直方图的计算非常耗时。
一旦我们有了直方图,我们就想计算条件概率p(y|x)。如何做到这一点的一种可能方法是采用 p(y|x) = count(y,x) / count(x),如以下查询中所述:
with histogram as (
// Long and time consuming subquery returning {x, y, cnt}
), x_count as (
select x
, sum(cnt) as cnt
from histogram
group by x
)
select y
, x
, cnt/x_count.cnt as probability
from histogram
join x_count
using(x)
但是,公用表表达式 (CTE) 是不可移植的(例如 MySQL 不能使用它们)。有没有办法重写 CTE:
- 可以在 MySQL、MSSQL 和 PostgreSQL 上执行相同的查询而不需要更改?
- 关系直方图只计算一次?
我能想到的就是将直方图具体化为一个表格。处理直方图。并删除直方图。
【问题讨论】:
-
在 MariaDB 版本 10.2.1 中,您可以使用 CTE:mariadb.com/kb/en/mariadb/with
-
@BerndBuffen - 不错! MySQL 也支持 8.0.0 版的 CTE:mysqlserverteam.com/…
标签: mysql sql sql-server postgresql