php - 根据另一个表的 2 个条件计算 mysql 表行

标签 php mysql

我有两个表 table1table2table1 有列 idtable2_idtable2idcategory 。我需要根据 table2.category 中包含值 RegularSpecial 的两个单独值来计算 table1 中的行数。

我已经在两个查询中完成了此操作,但我想知道在单个 sql 中是否可行。我的查询是:

"SELECT COUNT(t1.id) AS regular FROM table1 t1 LEFT OUTER JOIN table2 t2 ON t1.t2_id = t2.id WHERE t2.category = 'Regular'";
"SELECT COUNT(t1.id) AS special FROM table1 t1 LEFT OUTER JOIN table2 t2 ON t1.t2_id = pr.id WHERE t2.category = 'Special'";

谢谢。

编辑

第二个查询 JOIN 应该读取 ON t1.t2_id = t2.id 而不是 ON t1.t2_id = pr.id。对于可能造成的困惑,我们深表歉意。请相应地更新/编辑您的答案/评论。

最佳答案

移动Where条件 CASE声明并进行计数

这是使用 Conditional Aggregate 的一种方式

SELECT
COUNT(case when t2.category = 'Regular' then t1.id end) AS Regular,
COUNT(case when t2.category = 'Special' then t1.id end) AS special 
FROM table1 t1 
INNER JOIN table2 t2 ON t1.t2_id = pr.id 
Where t2.category IN ('Regular','Special' )

注意:我已经更改了 LEFT JOININNER JOIN因为你只想在 table2.category 时计算是'Regular''Special'所以不用 LEFT JOIN这里

关于php - 根据另一个表的 2 个条件计算 mysql 表行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40193189/

相关文章:

php -/index.php/seo_path 这样的 URI 有多可靠

php - 为什么 mysql 数据只打印电子邮件正文中的最后一行?

php - 从 Codeigniter 上传到 S3 存储桶

php - 获取我的 laravel 网站的所有链接以获取站点地图

PHP 与 jquery 数据表与 CRUD 只能编辑可见记录

php - 如何使用订阅者选项?

mysql - 如果另一个查询在 mysql 中获取空值,则运行查询

mysql - 单个MySQL查询父子表值排序

MySQL 查询帮助分组和添加

MySQL严格字符串比较语义上正确的方法?