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
。。。