如何在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