SQL 对连接范围内的所有行进行计数

问题描述 投票:0回答:1

我正在尝试此处回答的一个版本:获取值在 MySQL 值范围内的行数。但是,我试图计算的行位于联接内,据我所知,我需要能够将联接分配给别名,但我不知道该怎么做。 FWIW,我正在使用 duckdb,但应该不会有问题,因为它接受 SQL 查询。

假设我的数据是这样的:

表1:

id 瓦尔
1 1
2 1
3 3
4 2

表2:

id
1
1 酒吧
2 巴兹
3
4

我想获得 1 val 内所有单词的计数。我想在对相同的 id 进行内部联接并聚合之后,结果应该如下所示:

加入并统计表:

id 瓦尔 cnt
1 1 4
1 1 酒吧 4
2 1 巴兹 4
3 3 2
4 2 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;
sql join variable-assignment duckdb
1个回答
0
投票

DuckDb 支持 CTE,因此您首先需要处理 t1 并将其用作计算源

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

id 瓦尔 cnt
1 1 4
1 1 酒吧 4
2 1 巴兹 4
3 3 2
4 2 5
© www.soinside.com 2019 - 2024. All rights reserved.