我正在try 一个答案的版本:Getting count of rows that have values within a value range MySQL.但是,我试图计数的行是在一个join内部,就我所知,我需要能够将join分配给一个别名,我不知道如何做到这一点.FWIW,我正在使用duckdb,但应该不会有问题,因为它接受SQL查询.

我的数据是这样的:

表1:

id val
1 1
2 1
3 3
4 2

表2:

id words
1 foo
1 bar
2 baz
3 nu
4 olde

我想得到1 val内所有单词的计数.我假设在对相同的id进行内部连接并聚合之后,结果应该是这样的:

加入和计数表:

id val words cnt
1 1 foo 4
1 1 bar 4
2 1 baz 4
3 3 nu 2
4 2 olde 5

从原来的问题来看,我的疑问如下.请注意,我将INNER JOIN部分加在括号内,试图将其分配给一个变量/别名,这样我就可以在LEFT JOIN中引用它:

SELECT
    id,
    val,
    words,
    COUNT(*) AS cnt
FROM (Table1
    INNER JOIN Table2
    ON Table1.id=Table2.id) t1
LEFT JOIN t1 t2
    ON ABS(t1.val - t2.val) <= 1
GROUP BY
    t1.val, t1.id;

推荐答案

这也可以写成Correlated Subquery吗?

with t1 as (
   from Table1 join Table2 using (id)
)
from t1 t2 -- the `t2` alias here makes it a correlated subquery
select
   *,
   (select count(*) from t1 where abs(t1.val - t2.val) <= 1) count

┌───────┬───────┬─────────┬───────┐
│  id   │  val  │  words  │ count │
│ int64 │ int64 │ varchar │ int64 │
├───────┼───────┼─────────┼───────┤
│     1 │     1 │ foo     │     4 │
│     1 │     1 │ bar     │     4 │
│     2 │     1 │ baz     │     4 │
│     3 │     3 │ nu      │     2 │
│     4 │     2 │ olde    │     5 │
└───────┴───────┴─────────┴───────┘

Sql相关问答推荐

如何在Presto中将多个列合并到一个数组中

如何在SQL Server中拆分包含字符和数字的列?

PostgreSQL 9.6嵌套的INSERT/RETURN语句的CTE性能低得令人无法接受

SQL:如何在表中同时使用GROUPING和CONDITION?

在Netezza SQL中将字符DataType转换为整型DataType

Select 列组(按同一表格中的另一列分组)Laravel 10

SQL数据库规范化与数据插入

SQL按组 Select 最小值,当值不存在时为Null

将时间范围划分为全天和前后剩余小时

在 PostgreSQL 中使用 ltree 列进行累积

每个分组最多 Select 最后 2 个值并并排显示它们

确定小数中使用的精度位数

Postgresql - 如何根据阈值计算累积和

获取多个开始-结束时间戳集之间经过的时间

如何在TSQL中编写此窗口查询

使用SQLAlchemy和Postgres数据库创建新行时,为什么我的创建日期比更新日期晚?

Oracle函数中无法动态迭代创建的SYS_REFCURSOR

如何更改 duckdb R 中的数据约束

来自 SQL Server 的树层次 struct 图的 JSON

在时态表和非时态表之间使用 EXCEPT 的 SQL 子查询给出表达式错误数