我有一个包含5个字段的表。每个字段可以存储1到59之间的数字。
与Excel中的countif类似,如何计算1到59中的数字在所有5个字段中显示的次数?
以下是所有五个字段中数字1的出现次数的示例:
SELECT SUM(pick_1 = 1 OR pick_2 = 1 OR pick_3 = 1 OR pick_4 = 1 OR pick_5 = 1) AS total_count_1
FROM tbldraw
希望我有道理。
答案 0 :(得分:1)
这里有一个答案有一个解决方案。我认为这只是一种变化。
步骤1:创建一个数字表(1个字段,称为id,59个记录(值1 -59))
步骤2:
SELECT numbers_table.number as number
, COUNT(tbldraw.pk_record)
FROM numbers_table
LEFT JOIN tbldraw
ON numbers_table.number = tbldraw.pick_1
OR numbers_table.number = tbldraw.pick_2
OR numbers_table.number = tbldraw.pick_3
OR numbers_table.number = tbldraw.pick_4
OR numbers_table.number = tbldraw.pick_5
GROUP BY number
ORDER BY number
答案 1 :(得分:0)
两步过程怎么样?假设一个名为summary_table ( int id, int ttl)
的表,对于您关心的每个数字......
insert into summary_table values (1,
(select count(*)
from table
where field1 = 1 or field2 = 1 or field3 = 1 or field4 = 1 or field5 = 1))
这样做59次,每次一次。在大多数情况下,您可以使用循环。然后您可以从summary_table中选择
select *
from summary_table
order by id
那就行了。对于那些知道正在使用什么数据库的人来说,我将这个SQL的内容留给了一个存储过程。
答案 2 :(得分:0)
ALL()
函数,如果前面的运算符为true
所有参数,则返回true
,使查询特别优雅和简洁。
要查找特定数量的计数(例如3):
select count(*)
from tbldraw
where 3 = all (pick_1, pick_2, pick_3, pick_4, pick_5)
要查找所有这些数字的计数:
select pick_1, count(*)
from tbldraw
where pick_1 = all (pick_2, pick_3, pick_4, pick_5)
group by pick_1