如何搜索 mysql 中有多少重复项并进行比较
How to search for how much duplicate in mysql and compare it
所以我想比较变量 a
和变量 b
根据它们在 mysql 中有多少重复项。这是我的代码:
query = """ SELECT `do` FROM `foo` """
cursor.execute(query)
result=cursor.fetchall()
a = '0001'
b = '1100'
y = collections.Counter(result)
print(y)
这是我的输出:
Counter({('0001',): 2, ('1100',): 1}, ('0000',): 4})
输出正在计算整行的重复项。我希望它只计算 mysql.
中有多少 a
和 b
而且我真的不知道这之后该做什么。我希望代码 运行
if a > b
打印 a
。
if a < b
print b
我想要的输出:
a = 2 # number of duplicates
b = 1
a # print a because a > b
任何答案将不胜感激。
a = ("0001",) # Set to tuples so you can directly use them as keys
b = ("1100",)
y = Counter({('0001',): 2, ('1100',): 1, ('0000',): 4})
a_count = y.get(a) # The number of times `("0001",)` occurs
b_count = y.get(b) # The number of times `("1100",)` occurs
if a_count > b_count:
print(a)
elif a_count < b_count:
print(b)
您可以使用更复杂的查询来提取您需要的数据,并减少您在 Python 中需要做的工作量。
此查询提取 do
的值,以及 WHERE
子句中指定的 do
值的包含 do
值的行数.
stmt = """SELECT do, COUNT(do)
FROM foo
WHERE do IN ('0001', '1100')
GROUP BY do;"""
cursor.execute(stmt)
result=cursor.fetchall() # [('0001', 2), ('1100', 1)]
largest = max(result, key=lambda x: x[1])
print(largest[0])
或者您可以在数据库中完成所有工作。此查询对值及其行数进行分组,就像之前的查询一样,但按行数降序排列,returns 第一行。
stmt = """SELECT do, COUNT(do) AS do_count
FROM foo
WHERE do IN ('0001', '1100')
GROUP BY do
ORDER BY do_count DESC
LIMIT 1;"""
cur.execute(stmt)
result = cursor.fetchone() # ('0001', 2)
print(result[0])
请注意,这两种方法都假定 do
的两个值不会像问题中的代码那样具有相同的行数。如果代码要处理这种情况,则必须在第一个示例中的 max
或第二个示例中的 ORDER BY
子句的关键函数中指定其他排序条件。
所以我想比较变量 a
和变量 b
根据它们在 mysql 中有多少重复项。这是我的代码:
query = """ SELECT `do` FROM `foo` """
cursor.execute(query)
result=cursor.fetchall()
a = '0001'
b = '1100'
y = collections.Counter(result)
print(y)
这是我的输出:
Counter({('0001',): 2, ('1100',): 1}, ('0000',): 4})
输出正在计算整行的重复项。我希望它只计算 mysql.
中有多少a
和 b
而且我真的不知道这之后该做什么。我希望代码 运行
if a > b
打印 a
。
if a < b
print b
我想要的输出:
a = 2 # number of duplicates
b = 1
a # print a because a > b
任何答案将不胜感激。
a = ("0001",) # Set to tuples so you can directly use them as keys
b = ("1100",)
y = Counter({('0001',): 2, ('1100',): 1, ('0000',): 4})
a_count = y.get(a) # The number of times `("0001",)` occurs
b_count = y.get(b) # The number of times `("1100",)` occurs
if a_count > b_count:
print(a)
elif a_count < b_count:
print(b)
您可以使用更复杂的查询来提取您需要的数据,并减少您在 Python 中需要做的工作量。
此查询提取 do
的值,以及 WHERE
子句中指定的 do
值的包含 do
值的行数.
stmt = """SELECT do, COUNT(do)
FROM foo
WHERE do IN ('0001', '1100')
GROUP BY do;"""
cursor.execute(stmt)
result=cursor.fetchall() # [('0001', 2), ('1100', 1)]
largest = max(result, key=lambda x: x[1])
print(largest[0])
或者您可以在数据库中完成所有工作。此查询对值及其行数进行分组,就像之前的查询一样,但按行数降序排列,returns 第一行。
stmt = """SELECT do, COUNT(do) AS do_count
FROM foo
WHERE do IN ('0001', '1100')
GROUP BY do
ORDER BY do_count DESC
LIMIT 1;"""
cur.execute(stmt)
result = cursor.fetchone() # ('0001', 2)
print(result[0])
请注意,这两种方法都假定 do
的两个值不会像问题中的代码那样具有相同的行数。如果代码要处理这种情况,则必须在第一个示例中的 max
或第二个示例中的 ORDER BY
子句的关键函数中指定其他排序条件。