MySQL选择计数不同

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

我使用的是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'
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