我有两个表 table1
和 table2
。 table1
有列 id
和 table2_id
而 table2
有 id
和 category
。我需要根据 table2.category
中包含值 Regular
或 Special
的两个单独值来计算 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 JOIN
至 INNER JOIN
因为你只想在 table2.category
时计算是'Regular'
或 'Special'
所以不用 LEFT JOIN
这里
关于php - 根据另一个表的 2 个条件计算 mysql 表行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40193189/