0

我有一个包含 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

希望我是有道理的。

4

3 回答 3

1

这里有一个有解决方案的答案。我认为这只是一种变体。

Step1:创建一个数字表(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
于 2013-10-05T14:58:40.490 回答
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 的介绍留在了一个存储过程中。

于 2013-10-05T14:37:37.483 回答
0

如果前面的运算符用于所有参数,则ALL()返回的函数使查询特别优雅和简洁。truetrue

要找到特定数字(例如 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
于 2013-10-05T17:26:27.300 回答