我的目标是显示第二列中具有20+值的状态。 目前我已经能够显示状态和值,但我需要组合相似的状态和它们的值(例如VIC和Vic和vic应该等于VIC 68)。 我也只想显示状态,而不是它们的值,但值继续显示。我猜它使用LIKE结合GROUP BY但我无法弄清楚如何。
我当前的SQL查询:
SELECT DEPARTMENT.STATE, COUNT(ACADEMIC.DEPTNUM) FROM ACADEMIC
JOIN DEPARTMENT
ON DEPARTMENT.DEPTNUM=ACADEMIC.DEPTNUM
GROUP BY DEPARTMENT.STATE;
输出:
STATE COUNT(ACADEMIC.DEPTNUM)
----- -----------------------
NSW 82
7
QLD 21
VIC 14
vic 1
WA 42
Tas 1
SA 40
Qld 55
Vic 53
ACT 35
TAS 8
我不知道怎么做,有人可以帮忙吗?
答案 0 :(得分:1)
IsComposite(InitialCandidate, Candidate):
For all Prefixes of Candidate:
if Prefix is in Words:
Suffix= Candidate - Prefix
if Suffix == "":
return Candidate != InitialCandidate
else:
return IsComposite(InitialCandidate, Suffix)
For all Candidate words by decreasing size:
if IsComposite(Candidate, Candidate):
print Candidate
break
使用SELECT DEPARTMENT.STATE, COUNT(ACADEMIC.DEPTNUM) FROM ACADEMIC
JOIN DEPARTMENT
ON DEPARTMENT.DEPTNUM=ACADEMIC.DEPTNUM
GROUP BY DEPARTMENT.STATE
HAVING COUNT(ACADEMIC.DEPTNUM) >= 20;
仅返回计数为20 +的行。
要处理不同的情况,请在所有状态下执行HAVING
:
UPPER
答案 1 :(得分:0)
我需要结合相似的状态和它们的值(例如VIC和Vic和vic应该等于VIC 68)
您需要在子查询中使用 SUM 和 GROUP BY(UPPER / LOWER),或者只需使用 UPPER / LOWER 原始查询中的 GROUP BY 表达式。
例如,
SQL> with data as(
2 select 'VIC' state, 14 cnt from dual union all
3 select 'vic' state, 1 cnt from dual union all
4 select 'Vic' state, 53 cnt from dual
5 )
6 select upper(state), sum(cnt) count
7 from data
8 group by upper(state);
UPP COUNT
--- ----------
VIC 68
由于您已经拥有了可以计算的子查询,因此您需要在 GROUP BY 中使用 UPPER / LOWER ,以便计数现在会考虑类似的状态:
SELECT UPPER(DEPARTMENT.STATE) AS "STATE"
FROM ACADEMIC
JOIN DEPARTMENT
ON DEPARTMENT.DEPTNUM=ACADEMIC.DEPTNUM
GROUP BY UPPER(DEPARTMENT.STATE)
HAVING COUNT(ACADEMIC.DEPTNUM) >= 20;