我有以下两个表,
表1:
id document
--------------
A3 B2
A3 B400
A5 B100
A5 B500
A7 B200
A8 B6
A8 B2
A8 C1
A8 B3
表2:
id name
--------------
A1 Jack
A2 Martin
A3 Jack
A4 Thomas
A5 Jack
A6 Thomas
A7 Thomas
A8 John
A9 John
A10 Kate
我的过滤条件如下,应根据此列表比较document
列和过滤器:
WHERE table1.document IN (B2,B400,B100,B500,B200,B6,B2,B3)
结果应该是:
name freq
--------------
Jack 4
Thomas 1
John 3
解释:
首先,我在我的WHERE IN
子句中过滤了我的文档。然后我看看剩下的文件' table1 中id
列的对应值,以及
在第二个表,第一列中查看id
,并获取该ID的相应name
并将其放入我的结果表中。
例如,A3重复两次,其对应的name
为Jack
,所以到目前为止,Jack在freq
列中的值为3,但是因为下一个id在
我的table1是A5,重复两次,其名称恰好也是Jack
,因此jack
的频率为4。
对于table1中的下一个值,A7具有相应的名称Thomas
,因为A7重复一次,而没有其他id对应的名称是Thomas
不在我的table1列表中,那么Thomas的频率为1(我没有A4,也没有表1中的A6)。
在最后一个例子中,我在表1中重复了4次A8,但是,由于WHERE IN
中的列表中没有包含C1
,因此该条目将被过滤
并且没有计算,所以我剩下三个A8,其名称为John
,然后它的值为3.
这是一个demo数据。
答案 0 :(得分:4)
看似简单的JOIN
GROUP BY
可以提供所需的结果:
SELECT t2.name, COUNT(*) AS freq
FROM table1 AS t1
JOIN table2 AS t2 ON t1.id = t2.id
WHERE t1.document IN ('B2','B400','B100','B500','B200','B6','B2','B3')
GROUP BY t2.name;