SQLite查询开奖表中出现超2次的数字及对应开奖期号
SQLite 单数字出现频次统计正确实现方案
原有查询问题说明
你之前的写法是将每期的三个号码拼接为字符串后分组,统计的是三个号码的组合出现的次数,而非单个号码的出现次数,和需求不匹配。
实现思路
首先通过UNION ALL将每行的n1、n2、n3三个字段拆分为独立的单数字行,每条记录关联对应开奖期号,再按单个数字分组统计即可。
正确查询语句
SELECT num AS numbers, COUNT(*) AS quantity, GROUP_CONCAT(drawnumber, ', ') AS Draw FROM ( -- 拆分三个数字字段为独立行 SELECT drawnumber, n1 AS num FROM MyTbl UNION ALL SELECT drawnumber, n2 AS num FROM MyTbl UNION ALL SELECT drawnumber, n3 AS num FROM MyTbl ) AS t GROUP BY num -- 按需调整筛选条件:严格按需求要超过2次就写COUNT(*)>2,要和你给出的预期结果一致(包含出现2次的数字)就保留当前的>=2 HAVING COUNT(*) >= 2 ORDER BY quantity DESC;
结果说明
如果严格按照需求中「出现次数超过2次」的要求,将HAVING条件改为COUNT(*) > 2,输出结果只会保留数字18和20;如果需要和你给出的预期结果一致,保留出现2次及以上的数字,就使用上面的COUNT(*)>=2条件即可。
内容的提问来源于stack exchange,提问作者Juan Perez
相关产品推荐
相关产品推荐

