Mysql 单个查询中的多个select count(*)
我有一个类似上面的mysql表(tbl_subscriptiondetails) “测试状态”只能有可能的值C、S和Y。 使用单个查询,我希望以以下方式获取数据 如下图所示 但是我正在使用的查询给了我不想要的结果Mysql 单个查询中的多个select count(*),mysql,Mysql,我有一个类似上面的mysql表(tbl_subscriptiondetails) “测试状态”只能有可能的值C、S和Y。 使用单个查询,我希望以以下方式获取数据 如下图所示 但是我正在使用的查询给了我不想要的结果 SELECT pkg_name, (SELECT COUNT(*) FROM tbl_subscriptiondetails WHERE test_status='C' AND mem_id=3) AS completed, (SELECT COUNT(*) FROM t
SELECT pkg_name,
(SELECT COUNT(*) FROM tbl_subscriptiondetails WHERE test_status='C' AND mem_id=3) AS completed,
(SELECT COUNT(*) FROM tbl_subscriptiondetails WHERE test_status='S' AND mem_id=3) AS started,
(SELECT COUNT(*) FROM tbl_subscriptiondetails WHERE test_status='Y' AND mem_id=3) AS remaining
FROM tbl_subscriptiondetails
WHERE mem_id=3
GROUP BY pkg_name
结果是
请告诉我出了什么问题。提前感谢。您正在为每个计数运行子查询,而不是将计数作为主查询的一部分。因此,您的筛选条件的行为与您预期的不同。您可以这样更改它,以执行条件计数:
SELECT pkg_name,
SUM( case when test_status='C' then 1 else 0 end) AS completed,
SUM( case when test_status='S' then 1 else 0 end) AS started,
SUM( case when test_status='Y' then 1 else 0 end) AS remaining
FROM tbl
WHERE mem_id = 3
GROUP BY pkg_name
您有独立的查询。尝试添加依赖项:
和t1.pkg_name=t.pkg_name
您的剩余逻辑应该是“S”+“Y”?您也可以编写它而不需要子查询:选择SUM(IF(test_status='C',1,0))
和IF
'sbetter将mem_id排除到何处