Mysql 使用 group BY join 和 case 计数
Mysql count with group BY join and case
我有下面的表格,
包
id, package_name
测试
id, test_name, test_type
test_package_mapping
id, test_id, package_id
现在我想获取特定 package_id 测试类型
的映射测试计数
示例:
我有两种测试类型
1. MCQ
2. Answer Upload
所以我想像下面这样获取映射测试的计数,
mcqtestcount : 30
answeruploadtestcount: 20
在test_package_mapping中有时会错误地重复test_id所以我也想添加分组依据,
到目前为止,我尝试了如下查询,
$packageid = 131;
$sql = "SELECT COUNT(DISTINCT(case when u.test_type ='MCQ' then 1 end)) AS test_count,
COUNT(DISTINCT(case when u.test_type ='Answer Upload' then 1 end)) AS answeruploadtestcount
FROM tests AS u
INNER JOIN (
SELECT test_id
FROM test_package_maping
WHERE test_package_maping.package_id = $packageid
GROUP BY test_package_maping.test_id
) AS a ON a.test_id = u.test_id where u.test_type = 'Mains'";
$testscount = DB::select($sql);
以上查询无效,当我尝试使用不同的方法通过分组进行计数时,它显示 1,即使它有更多记录。
任何解决方案?
谢谢。
您可以通过在 tests
和 test_package_mapping
的连接 table 中按 test_type 分组来获得所需的结果。
请尝试使用以下SQL。
并且您需要在测试 table 的 test_type
列上添加索引。
SELECT
t.test_type,
COUNT (t.id) AS testCount
FROM
tests AS t
INNER JOIN test_package_mapping m
ON t.id = m.test_id
WHERE m.package_id = $ packageid
GROUP BY t.test_type;
我有下面的表格,
包
id, package_name
测试
id, test_name, test_type
test_package_mapping
id, test_id, package_id
现在我想获取特定 package_id 测试类型
的映射测试计数示例:
我有两种测试类型
1. MCQ
2. Answer Upload
所以我想像下面这样获取映射测试的计数,
mcqtestcount : 30
answeruploadtestcount: 20
在test_package_mapping中有时会错误地重复test_id所以我也想添加分组依据,
到目前为止,我尝试了如下查询,
$packageid = 131;
$sql = "SELECT COUNT(DISTINCT(case when u.test_type ='MCQ' then 1 end)) AS test_count,
COUNT(DISTINCT(case when u.test_type ='Answer Upload' then 1 end)) AS answeruploadtestcount
FROM tests AS u
INNER JOIN (
SELECT test_id
FROM test_package_maping
WHERE test_package_maping.package_id = $packageid
GROUP BY test_package_maping.test_id
) AS a ON a.test_id = u.test_id where u.test_type = 'Mains'";
$testscount = DB::select($sql);
以上查询无效,当我尝试使用不同的方法通过分组进行计数时,它显示 1,即使它有更多记录。 任何解决方案? 谢谢。
您可以通过在 tests
和 test_package_mapping
的连接 table 中按 test_type 分组来获得所需的结果。
请尝试使用以下SQL。
并且您需要在测试 table 的 test_type
列上添加索引。
SELECT
t.test_type,
COUNT (t.id) AS testCount
FROM
tests AS t
INNER JOIN test_package_mapping m
ON t.id = m.test_id
WHERE m.package_id = $ packageid
GROUP BY t.test_type;