我正在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;