如何在mysql案例函数中执行子查询?

如何在mysql案例函数中执行子查询?,mysql,sql,case,Mysql,Sql,Case,我试图根据特定列的值以不同方式(作为两个不同的值)提取字段值的计数,在我的例子中,即jjsc_rev_cycle 如果jjsc\u rev\u循环为0 然后得到 count(不同的jjsc作业号)作为新订单计数 否则 计数(不同的jjsc作业号)为修订订单计数 我试图在1个查询中这样做,但表示语法错误: SELECT jjsc_rev_cycle, CASE jjsc_rev_cycle WHEN jjsc_rev_cycle = 0 THEN select count(disti

我试图根据特定列的值以不同方式(作为两个不同的值)提取字段值的计数,在我的例子中,即
jjsc_rev_cycle

如果
jjsc\u rev\u循环
0
然后得到

count(不同的jjsc作业号)作为新订单计数

否则

计数(不同的jjsc作业号)为修订订单计数

我试图在1个查询中这样做,但表示语法错误:

SELECT jjsc_rev_cycle, 
 CASE jjsc_rev_cycle 
 WHEN jjsc_rev_cycle = 0 
 THEN  select count(distinct jjsc_job_no) as new_order_count
 ELSE  select count(distinct jjsc_job_no) as rev_order_count 
 END
 FROM jdwf_job_status_cycle 
 WHERE  jjsc_time >= '2017-06-01' and jjsc_time <= '2017-06-03' group 
 by jjsc_wf_userid
预期产出:

new_order_count    rev_order_count
17                 2

我做错了什么?或者有其他方法可以替代吗?

您不能在案例中执行聚合,但在我看来,您需要在下面执行聚合

 SELECT jjsc_rev_cycle, sum(case when jjsc_rev_cycle = 0 then 1 else 0 end) 
 as new_order_count,
sum(case when jjsc_rev_cycle!= 0 then 1 else 0 end)  as rev_order_count

 FROM jdwf_job_status_cycle 
 WHERE  jjsc_time >= '2017-06-01' and jjsc_time <= '2017-06-03' group 
 by jjsc_wf_userid

您无法在案例中执行聚合,但在我看来,您需要在下面执行聚合

 SELECT jjsc_rev_cycle, sum(case when jjsc_rev_cycle = 0 then 1 else 0 end) 
 as new_order_count,
sum(case when jjsc_rev_cycle!= 0 then 1 else 0 end)  as rev_order_count

 FROM jdwf_job_status_cycle 
 WHERE  jjsc_time >= '2017-06-01' and jjsc_time <= '2017-06-03' group 
 by jjsc_wf_userid
您在问题中使用了
count(distinct)
,因此我认为这是必要的。如果是,正确的逻辑是:

SELECT jjsc_wf_userid,
       COUNT(DISTINCT CASE WHEN jjsc_rev_cycle = 0 THEN  jjsc_job_no END) as new_order_count,
       COUNT(DISTINCT CASE WHEN jjsc_rev_cycle <> 0 THEN  jjsc_job_no END) as rev_order_count
FROM jdwf_job_status_cycle 
WHERE jjsc_time >= '2017-06-01' AND
      jjsc_time < '2017-06-04' 
GROUP BY jjsc_wf_userid
您在问题中使用了
count(distinct)
,因此我认为这是必要的。如果是,正确的逻辑是:

SELECT jjsc_wf_userid,
       COUNT(DISTINCT CASE WHEN jjsc_rev_cycle = 0 THEN  jjsc_job_no END) as new_order_count,
       COUNT(DISTINCT CASE WHEN jjsc_rev_cycle <> 0 THEN  jjsc_job_no END) as rev_order_count
FROM jdwf_job_status_cycle 
WHERE jjsc_time >= '2017-06-01' AND
      jjsc_time < '2017-06-04' 
GROUP BY jjsc_wf_userid

不过,您的答案中有两个
as
s。这很有效。谢谢打扰您,但是我怎样才能得到唯一的
jjsc\u作业编号
的计数呢?您的答案将所有行作为计数@Zaynul AbadinTuhin@RedBottle你可以在GroupBy上加上这一点,实际上我不能这样做,因为我必须按
jjsc\u wf\u userid
对它进行分组,并按
jjsc\u job\u no
对它进行分组,而
jjsc\u wf\u userid
也不能给我正确的结果@Zaynul Abadin Tuhin你能帮我吗你能给我你的数据和预期输出的样本表吗?不过你的答案中有两个
as
s。这很有效。谢谢打扰您,但是我怎样才能得到唯一的
jjsc\u作业编号
的计数呢?您的答案将所有行作为计数@Zaynul AbadinTuhin@RedBottle你可以在GroupBy上加上这一点,实际上我不能这样做,因为我必须按
jjsc\u wf\u userid
对它进行分组,并按
jjsc\u job\u no
对它进行分组,而
jjsc\u wf\u userid
也不能给我正确的结果@Zaynul Abadin Tuhin你能帮我吗你能给我你的样品表和数据以及预期的输出吗?这个解决方案是有意义的。我也一定会试试这个。这个解决方案很有意义。我一定也会试试这个。
SELECT jjsc_wf_userid,
       SUM(jjsc_rev_cycle = 0) as new_order_count,
       SUM(jjsc_rev_cycle <> 0) as rev_order_count
FROM jdwf_job_status_cycle 
WHERE jjsc_time >= '2017-06-01' AND
      jjsc_time < '2017-06-04' 
GROUP BY jjsc_wf_userid