我试图计算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/

10-11 07:43
查看更多