MySQL选择计数不同
我使用的是MySQL,在计算总数时遇到了问题。我正在尝试找出一个SQL查询,它将使用以下数据和查询返回正确的结果。我想统计一下总的案件数。在我的查询结果中,F和I计数是正确的,M计数是关闭的。如果案例有一个F,那么它应该被算作一个F案例,而不是我的查询所做的M案例 数据: 查询:MySQL选择计数不同,mysql,Mysql,我使用的是MySQL,在计算总数时遇到了问题。我正在尝试找出一个SQL查询,它将使用以下数据和查询返回正确的结果。我想统计一下总的案件数。在我的查询结果中,F和I计数是正确的,M计数是关闭的。如果案例有一个F,那么它应该被算作一个F案例,而不是我的查询所做的M案例 数据: 查询: Select Severity as 'Charge CLass', Count(Distinct BKNUM, CG) as 'Total Cases', Count(BKNUM) as 'Toatl Charges
Select Severity as 'Charge CLass',
Count(Distinct BKNUM, CG) as 'Total Cases',
Count(BKNUM) as 'Toatl Charges'
From test
group by severity
结果我得到:
Charge Class Total Cases Total Charges
F 4 4
I 2 2
M 5 12
结果应该是:
Charge Class Total Cases Total Charges
F 4 4
I 2 2
M 1 12
任何帮助都将不胜感激。您需要在BKNUM和CG列上使用类似GROUP BY的内容。请参阅以供参考-它将引导您找到您正在寻找的解决方案 这不是最漂亮的查询,但我认为应该可以:
SELECT CASE WHEN S = 1 THEN 'I' WHEN S = 2 THEN 'M' ELSE 'F' END
, Qty
, BKNUM
, CG
FROM (
SELECT MAX(CASE WHEN Severity = 'I' THEN 1 WHEN Severity = 'M' THEN 2 ELSE 3 END) AS S
, COUNT(*) AS Qty
, BKNUM
, CG
FROM Test
GROUP BY BKNUM, CG ) AS t
select t.severity, count(distinct bknum) "Total Cases", a.c "Total Charges"
from test t
join (select severity, count(*) c from test group by severity) a on t.severity = a.severity
where t.severity in ('i','f')
or (t.severity = 'm' and bknum not in (select bknum from test where severity = 'f'))
group by t.severity, a.c
或者可能是这样:
select t.severity, count(distinct bknum, cg) "Total Cases", a.c "Total Charges"
from test t
join (select severity, count(*) c from test group by severity) a on t.severity = a.severity
where t.severity in ('i','f')
or (t.severity = 'm' and (bknum, cg) not in (select bknum, cg from test where severity = 'f'))
group by t.severity, a.c
你能把你的帖子格式化吗?很难阅读。你能详细解释一下为什么你认为“M”类只有1个吗M'与5个不同的BKNUM关联。。。和CG都是一样的,所以这就是有效的“独特的BKNUM”,你能在这里创建一个问题的sql小提琴吗:是的,Erich的BKNUM和CG组成了一个独特的例子。每个案件有多重指控。如果存在F费用,则应将其计算为F费用,即使该费用为M费用。如果只有M笔费用,则应算作M笔费用。这有意义吗?我试着做一把小提琴。我不知道如何让我的ddl工作…这似乎将工作!然而,费用是由独特的bknum和cg组成的,不仅仅是bknum。@rgipson不确定我是否明白你的意思,但我添加了另一个版本,可能正是你想要的。如果不是的话,请解释一下是怎么回事。非常感谢你,它似乎起作用了!是的,就是这样,我需要同时考虑BKNUM和CG,因为有时候BKNUM上可能有不同的CG,这应该被视为一个单独的案例。对不起,我没有在我的样本中添加任何类似的数据。
select t.severity, count(distinct bknum, cg) "Total Cases", a.c "Total Charges"
from test t
join (select severity, count(*) c from test group by severity) a on t.severity = a.severity
where t.severity in ('i','f')
or (t.severity = 'm' and (bknum, cg) not in (select bknum, cg from test where severity = 'f'))
group by t.severity, a.c