Mysql 在一个查询的多行和多列之间计算同一项

Mysql 在一个查询的多行和多列之间计算同一项,mysql,Mysql,我有下一张桌子: id| C1 | C2 | C3 | C4 | C5| ---------------------------- 01| 23 | 19 | 30 | 30 | 30| --------------------------- 02| 23 | 40 | 30 | 30 | 30| ---------------------------- 03| 23 | 20 | 19 | 30 | 30| ---------------------------- 04| 2

我有下一张桌子:

 id| C1 | C2 | C3 | C4 | C5|
 ----------------------------
 01| 23 | 19 | 30 | 30 | 30|
 ---------------------------
 02| 23 | 40 | 30 | 30 | 30|
 ----------------------------
 03| 23 | 20 | 19 | 30 | 30|
 ----------------------------
 04| 23 | 19 | 30 | 30 | 30|
 ----------------------------
 05| 23 | 23 | 23 | 19 | 30|
 ----------------------------
在此表中,数字19的计数为4


我需要一个查询来计算每个数字在表中出现的次数,在许多行和列中搜索,或者使用MySQL至少搜索数字19。

我将
union
所有列,然后只
count
值:

select count(*) FROM tablename where c1 = 19 OR c2 = 19 or c3 = 19 etc
SELECT   c, COUNT(*) 
FROM     (SELECT c1 AS c FROM my_table
          UNION ALL
          SELECT c2 FROM my_table
          UNION ALL
          SELECT c3 FROM my_table
          UNION ALL
          SELECT c4 FROM my_table
          UNION ALL
          SELECT c5 FROM my_table) t
GROUP BY c

一种选择是将
IF
求和
一起使用:

SELECT SUM(IF(id=19,1,0) + IF(c1=19,1,0) + IF(c2=19,1,0) +
     IF(c3=19,1,0) + IF(c4=19,1,0) + IF(c5=19,1,0)) 
FROM YourTable

如前所述,实际上不需要IF语句:

SELECT SUM((c1=19)+(c2=19)+(c3=19)+(c4=19))
FROM YourTable

我喜欢总和法:

SELECT SUM(
           (t1.c1=x.num) 
         + (t1.c2=x.num) 
         + (t1.c3=x.num)
         + (t1.c4=x.num)
         + (t1.c5=x.num)
         ) count 
  FROM table1 t1
  JOIN (SELECT 19 num) x

如果一行的多个列中有19个,那么这将不起作用。根据给出的示例判断,这不会发生,也没有给出条件。Lol“我需要一个查询来计算每个数字在表中出现的次数”。。看看30!您也可以将查询更改为
SELECT 4
@Arth不要小气,继续您的引用:“……或者MySQL中至少有19个。”@user3791372为小气道歉,但我看到您很方便地忽略了“搜索多行多列”。你的答案不是这样的,对19也不是这样,它只是碰巧起作用,因为19没有出现在同一行的多个列中。考虑到问题的性质,它与选择4一样好。你真的认为OP想要计算id吗?IFs也是不必要的。@Arth--好的一点是,
IFs
是不必要的。关于身份证,我想没有,但我不知道。这只是给了另一个更短的选择。谢谢是的,这是一个更好的方法,我想用一个连接来回答,以避免重复搜索条件,但本质上是一样的;更进一步说,每个数字都有一个查询吗?@Kirikou——当然,您只需要一个数字表来连接。然后,您可以根据该编号进行分组。这里有一个简单的例子:我同意,为什么这会被否决?这和我的答案很接近,但不一样。我会给它一个+1,因为我更喜欢
join
而不是多次写出
19
。。。