[英]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.