我试图计算sub_tag_1,sub_tag_2,sub_tag_3列,只有在条件为真的情况下,最后我希望得到所有三列的和。
这是我的虚拟表:
+---+-----------+-----------+-----------+
| id| sub_tag_1 | sub_tag_2 | sub_tag_3 |
+---+-----------+-----------+-----------+
| 1 | php | | |
| 2 | mysql | php | |
| 3 | java | | php |
+---+-----------+---------+-------------+
我已经尝试了很多次,但每次都失败了,这里是我的sql查询:
1) SELECT count(`sub_tag_1`) AND count(`sub_tag_2`) AND count(`sub_tag_3`)
FROM posts where `sub_tag_1`
LIKE "php" and `sub_tag_2` LIKE "php" and `sub_tag_3` LIKE "php";
上面的查询执行成功,但与数据库中的任何内容都不匹配,返回0
2) SELECT count(`sub_tag_1`) AND count(`sub_tag_2`) AND count(`sub_tag_3`)
FROM posts where `sub_tag_1` = "php" and `sub_tag_2` = "php"
and `sub_tag_3` = "php"
and sum(count(`sub_tag_1`)+count(`sub_tag_2`)+count(`sub_tag_3`));
上面的查询给出错误:组函数的使用无效
请给我建议,并一步一步地解释我该怎么做。。
最佳答案
在WHERE
子句中放入confinition将为您提供在所有三列中都有php
的所有行。因为没有,所以您将得到结果0
。
您要做的是检索所有行并只计算适当的值。这可以通过对每一列使用CASE
子句来完成,方式如下:
SELECT SUM(CASE sub_tag_1 WHEN 'php' THEN 1 ELSE 0 END) AS subg_tag_1_count,
SUM(CASE sub_tag_2 WHEN 'php' THEN 1 ELSE 0 END) AS subg_tag_2_count,
SUM(CASE sub_tag_3 WHEN 'php' THEN 1 ELSE 0 END) AS subg_tag_3_count
FROM my_table
WHERE 'php' IN (sub_tag_1, sub_tag_2, sub_tag_3)
关于mysql - 在where子句中对三个不同的列使用count,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21496167/