当前位置: 首页 > 知识库问答 >
问题:

Sqlite3从列中具有相似值的行中获取数据

柴昆杰
2023-03-14

我有一张像这样的桌子:

Mobs
========
Name   Room
-----------
a cat    2
fido     2
human    1

我试图设置一个sql查询语句,如果每一行的room值相同,则该语句将提取名称。

这是到目前为止我的代码,但它返回一个空列表:

class DBConnect(object):

    gamedb = 'game.db'

    def __init__(self):
        pass

############ TABLE PlayerInfo ###################
    def modify_data(self, string, dbfile, mode='get', fetch='all'):

        db = sqlite3.connect(dbfile)
        db.row_factory = lambda cursor, row: row[0]
        c = db.cursor()
        data = ''

        if mode == 'get':
            c.execute(string)
            if fetch == 'all':
                data = c.fetchall()
            elif fetch == 'one':
                data = c.fetchone()
            db.close()

            return data

        elif mode == 'update' or mode == 'insert':
            # update data
            c.execute(string)
            db.commit()
            db.close()

        else:
            print 'Something went wrong\nAborting Program...'
            sys.exit()

def mob_getname(self, value, using="id"):

    if using == "id":
        query = "SELECT name FROM Mobs WHERE ID=%s" % value
        return DBConnect().modify_data(query, DBConnect.gamedb)[0]
    elif using == "room":
        query = "SELECT name, room from Mobs " \  
                "GROUP BY name, room " \
                "HAVING COUNT(name) > 1" 
        return DBConnect().modify_data(query, DBConnect.gamedb)
    else:
        print 'Wrong value of using'
        return None

尝试:

print Mobs().mob_getname(2, using="room")

会有一个空名单?

我想得到一份清单

['a cat', 'fido']

非常感谢。

更新E:::

我已经尝试将执行的查询替换为:

query = "SELECT COUNT(*), room FROM Mobs GROUP BY Mobs " \
        "SELECT COUNT(*), room FROM Mobs GROUP BY room HAVING    COUNT(*)>1 " \
        "SELECT name FROM Mobs WHERE room=%s " % value

现在我得到一个错误: sqlite3。操作错误:靠近“选择”:语法错误

共有3个答案

祁嘉瑞
2023-03-14

要获得您所给出的所需结果列表,您的查询只需:

select Name from Mobs where Room = 2
蓟浩旷
2023-03-14

不能一个接一个地放置多个独立的SELECT查询。

您需要一个GROUP BY来确定具有多个条目的房间,然后您需要一个单独的查询来返回这些房间的所有条目:

SELECT Name, Room
FROM Mobs
WHERE Room IN (SELECT Room
               FROM Mobs
               GROUP BY Room
               HAVING COUNT(*) > 1);
魏旭
2023-03-14

您没有正确使用group by和HAVE子句。Group by将尝试对该列匹配的所有列进行分组。因此,如果按名称分组,则没有一行将折叠,也没有一行符合计数标准

如果我在读你的问题,你只需要

SELECT name FROM mobs WHERE room = %s

因为你提前知道房间号码。

注意,您的第二次尝试失败了,因为您需要;在查询之间

 类似资料:
  • DB有一个表,即。这些字段包括,,。 我需要得到属于某个且具有相同值的行的数量总和。 例如,表中有值:(2,3,4),(2,1,5),( 1 2,2,4),然后我需要获得以及第一行和第三行中其他列的总和。第二行也将出现在结果中。 让我们假设控制器名称为,模型名称为。 我应该如何编写查询? 编辑:表格有以下值:(2,3,4),(2,1,5),( 1 2,2,4)

  • 问题内容: 在pandas中,给定一个DataFrame D: 当三列或更多列返回以下内容时,如何返回其所有列具有相同内容的行: 请注意,当所有值均为NaN时,它将跳过行。 如果这仅仅是两列,我通常会这样做,但是我不知道如何针对两列以上的DataFrames进行概括。 问题答案: 与Andy Hayden的答案类似,检查min是否等于max(然后所有行元素都是重复的):

  • 问题内容: 因此,我有一个包含几个列表的列表,这些列表都首先包含三个字符串,然后是一个浮点数,例如: 如何制作一个返回最大值的函数(此处为9.1931)?我试过了 但这只是给我一个清单。 编辑:此外,以任何方式我可以获取值来自何处的索引?喜欢,来自哪个子列表? 问题答案: 循环浏览外部列表,然后选择每个子列表的最后一个元素: 最好将所有与函数相关的变量保留在范围内(将列表作为参数传递,并且不要通过

  • 问题内容: 请告诉我如何获取特定行的列值= 123的列名。 问题答案: 结果

  • 我有一个DenseVectors作为行的dataframe: 我想用UDF找到每一行的最大值。我就是这么做的: 文件“C:\programdata\anaconda3\envs\python2\lib\site-packages\pyspark\sql\utils.py”,第63行,deco格式返回f(*a,**kw) 文件“C:\programdata\anaconda3\envs\python