如何利用count()统计数据库查询结果中品牌的出现次数?
统计收藏手机品牌出现次数的两种方法
方法一:用SQL直接统计(推荐)
直接修改查询语句,利用COUNT()和GROUP BY让数据库完成统计,效率更高,不用在Python里处理冗余数据。
修改后的代码:
# 查询品牌及对应收藏次数 brand_counts = conn.execute(''' SELECT Smartphone.brand, COUNT(*) as count FROM Favourite INNER JOIN Smartphone ON Favourite.smartphoneID = Smartphone.id WHERE Favourite.userID = ? GROUP BY Smartphone.brand ''', (userid,)).fetchall() # 输出统计结果 for brand, count in brand_counts: print(f"{brand}出现{count}次")
说明:把用户ID的筛选条件移到WHERE子句更符合SQL规范,GROUP BY按品牌分组后,COUNT(*)会自动统计每组的记录数,直接返回你需要的统计结果。
方法二:在Python中统计现有查询结果
如果不想改动原SQL,也可以用Python内置工具处理已获取的结果:
首先导入Counter:
from collections import Counter
然后修改原有代码:
favourites = conn.execute('SELECT Favourite.id, Favourite.smartphoneID, Smartphone.brand, Smartphone.model, Smartphone.lowprice, Smartphone.highprice, Smartphone.image_URL FROM Favourite INNER JOIN Smartphone ON Favourite.userID = ? AND Favourite.smartphoneID = Smartphone.id',(userid,)).fetchall() # 提取所有品牌到列表 brands = [fav[2] for fav in favourites] # 统计品牌出现次数 brand_counter = Counter(brands) # 输出结果 for brand, count in brand_counter.items(): print(f"{brand}出现{count}次")
运行后就能得到Apple出现2次,Samsung出现1次这类符合预期的输出。
内容的提问来源于stack exchange,提问作者Fallen Hamster
相关产品推荐
相关产品推荐

