如何在数据库实体中返回满足条件的行的总数

2024-06-16 11:13:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数字列表,我循环通过它来确定数据库表中的实体是否至少匹配其中一个数字,如果匹配,我想计算这些实体在该表中出现的次数,并返回实体以及它们在表中出现的时间。由于实体可能匹配一个或多个数字,所以我可以使用pythons set()直接复制数据,除非显然有更好的方法。你知道吗

比如说

List  = [a, b, c, d]  # Unknown number of entries


Column 1    Column 2   column3 etc

Blue            a
Blue            -
Blue            a

Green           -
Red             a
Red             b
Red             c
Red             c
Red             -
Red             -

所以我试着回来:

Blue, 3
Red, 6

我所能得到的最接近的结果是在下面,但是没有得到想要的结果。你知道吗

for letter in list:

    c.execute('SELECT  colour, COUNT(*) FROM table GROUP BY colour HAVING letter=?', [(letter)])

我不知道如何进行这项工作,任何建议将不胜感激。你知道吗

响应@CL

这就是它返回的数据。列表中后面的嵌套包含正确的值,但是第一个嵌套包含“随机”值。我不明白这些是怎么形成的,所以我不确定如何去除它们。你知道吗

[[(red, 1), (anotherColour, 1)], [(red, 6), (blue, 3), (anotherColour, 5) ]]

Tags: 数据实体数据库列表时间column数字blue
1条回答
网友
1楼 · 发布于 2024-06-16 11:13:35

首先,获取要计数的实体:

SELECT DISTINCT colour
FROM MyTable
WHERE letter IN ('a', 'b', 'c', 'd')

然后,在计数前使用它过滤实体:

SELECT colour,
       COUNT(*)
FROM MyTable
WHERE colour IN (SELECT colour
                 FROM MyTable
                 WHERE letter IN ('a', 'b', 'c', 'd'))
GROUP BY colour

当条目数未知时,必须动态构造参数列表:

list = ['a', 'b', 'c', 'd']
params = ','.join('?' for _ in list)
c.execute("""SELECT colour,
                    COUNT(*)
             FROM MyTable
             WHERE colour IN (SELECT colour
                              FROM MyTable
                              WHERE letter IN (""" + params + """))
             GROUP BY colour""",
          list)

相关问题 更多 >