簡體   English   中英

MySQL選擇Count Distinct

[英]MySQL Select Count Distinct

我在使用MySQL並且無法計算總數。我正在嘗試找出一個SQL查詢,它將使用以下數據和查詢返回正確的結果。 我想得到總案件的數量。 在我的查詢結果中,F和I計數是正確的M案例計數關閉。 如果案例有一個F那么它應該被計為F案例,而不是我的查詢正在進行的M案例。

數據:

BKNUM      CG             Charge Description            Severity
123456      1       POSS CONT SUB W/I MAN/DEL/SELL          F
123456      1       POSS LEGEND DRUG W/O PRESCRIPTION       M
654321      1       VIOLATION OF PROBATION     M            I
987654      1       AGGRAVATED ASSAULT                      F
987654      1       POSS OF HANDGUN WHILE INTOXICATED       M
987654      1       POSSESSION OF PROHIBITED WEAPON         M
876543      1       VIOLATION OF PROBATION     M            I
765432      1       CRIM ATT-BURGLARY BUILDING              F
765432      1       POSSESSION OF BURGLARY TOOLS            M
234567      1       POSS MARIJUANA W/I MAN/DEL/SELL         F
234567      1       DRIVING WHILE LICENSE S/R/C             M
234567      1       IMPROPER DISPLAY OF REGISTRATION        M
345678      1       DRIVING WHILE LICENSE S/R/C             M
345678      1       EVADING ARREST                          M
345678      1       RESISTING OFFICIAL DETENTION            M
345678      1       UNLAWFUL POSS WEAPON                    M
345678      1       POSS OF CONT SUBSTANCE                  M
345678      1       CRIM ATT-POSS OF CONT SUB-MARIJUANA     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上使用GROUP BY,在CG列上使用DISTINCT。 請參閱MySQL中多列的Distinct以供參考 - 它應該引導您找到您正在尋找的解決方案。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM