如何搜索 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.

中有多少 ab

而且我真的不知道这之后该做什么。我希望代码 运行
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 子句的关键函数中指定其他排序条件。