【发布时间】:2021-05-24 14:24:13
【问题描述】:
我有两张桌子。
Table 1:
id_a,
id_b,
id_t
Table 2:
id_t,
name
如果表2名称以a开头,我需要找出任何东西
有匹配的id_ts 也有匹配的id_as。
如果表 2 名称以b 开头,我需要找出任何一行
有匹配的 id_ts 也有匹配的id_bs。
我需要知道这些匹配发生了多少次。
表 1
| id_a | id_b | id_t |
|---|---|---|
| 1 | 0 | 123 |
| 1 | 0 | 123 |
| 2 | 0 | 123 |
| 0 | 4 | 456 |
| 0 | 4 | 456 |
| 0 | 5 | 456 |
| 0 | 5 | 456 |
| 0 | 5 | 456 |
| 0 | 6 | 456 |
| 0 | 7 | 456 |
表 2
| id_t | name |
|---|---|
| 123 | aaq |
| 456 | bws |
所以在这个例子中,我想看到这样的结果
| id_t | name | num_non_unique |
|---|---|---|
| 123 | aaq | 1 |
| 456 | bws | 2 |
我当前的代码是这样的:
SELECT
t2.id_t, t2.name, count(t1.*) AS num_non_unique
FROM
Table 2 AS t2
JOIN Table 1 as t1 ON t2.id_t = t1.id_t
WHERE
(t2.name like 'a%' and t1.id_a in (SELECT id_a FROM t1 GROUP BY id_a, id_t HAVING count(*) > 1))
OR (t2.name like 'b%' AND t1.id_b IN (SELECT id_b FROM t1 GROUP BY id_b, id_t HAVING count(*) > 1))
GROUP BY t1.name, t1.id_t
这目前没有给我想要的结果。 使用这段代码,我似乎得到了 id_b 的所有可用行的计数,以及 id_a 的 1 + non_uniques 的计数(因此,如果有一个非唯一的,则值为 2,否则该列的值为 1)。
感谢任何帮助!
【问题讨论】:
-
你能解释一下你的输出吗?怎么会是
1for id_ts 123 amd2for id_ts456 -
因为 id_t 123 有一个值在 id_a 中重复,而对于 id_t 456 有两个值在 id_b 中重复。
-
已经为您的要求添加了答案
标签: sql database postgresql