gpt4 book ai didi

mysql - sql连接两个表并获得累计计数

转载 作者:行者123 更新时间:2023-11-29 04:36:04 27 4
gpt4 key购买 nike

我有下面两个表,

表 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 子句中的文档。然后查看剩余文档在table1id列对应的值,在第二个表的第一列中查找 id,并为该 id 获取相应的 name 并将其放入我的结果表中。
比如A3重复了两次,它对应的nameJack,所以到目前为止Jack在freq列中的值为3,但是因为下一个 id 在我的表 1 是 A5,重复了两次,它恰好也有 Jack 作为它的名字,所以 jack 将有 4 作为频率。
对于table1中的下一个值,A7对应的名字是Thomas,因为A7重复了一次,没有其他id对应的名字是Thomas不在我的 table1 列表中,那么 Thomas 的频率将为 1(我在 table1 中没有 A4,也没有 A6)。
在最后一个示例中,我在表 1 中将 A8 重复了 4 次,但是,由于我在 WHERE IN 中的列表没有包含 C1,因此该条目将被过滤并不算数,所以我还剩下三个A8,名字是John 然后它得到的值是3.

这是一个demo数据。

最佳答案

似乎一个简单的 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;

关于mysql - sql连接两个表并获得累计计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41284780/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com