mySQL计算多个字段上的值的出现次数。怎么样?

时间:2013-10-05 13:53:45

标签: mysql

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

希望我有道理。

3 个答案:

答案 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