2015-10-07 170 views
0

我的目標是顯示第二列中具有20+以上值的狀態。 目前,我已經能夠顯示狀態和值,但是我需要將狀態和狀態它們的價值(例如維多利亞和維克和維克應該等於VIC 68)。 我也只想顯示國家,而不是他們的價值觀,但值不斷顯示。我猜它使用LIKE與GROUP BY結合,但我不知道如何。組合GROUP BY和LIKE SQL

我當前的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

我覺得你不應該在DB中這樣做。這只是演示文稿。請參閱http://stackoverflow.com/a/32882720/5070879 – lad2025

+0

您需要** SUM **和** GROUP BY(上/下)**。 –

回答

1
SELECT DEPARTMENT.STATE, COUNT(ACADEMIC.DEPTNUM) FROM ACADEMIC 
JOIN DEPARTMENT 
ON DEPARTMENT.DEPTNUM=ACADEMIC.DEPTNUM 
GROUP BY DEPARTMENT.STATE 
HAVING COUNT(ACADEMIC.DEPTNUM) >= 20; 

使用HAVING只返回count爲20+的行。

爲了照顧不同的情況下,所有國家做UPPER

SELECT UPPER(DEPARTMENT.STATE), COUNT(ACADEMIC.DEPTNUM) FROM ACADEMIC 
JOIN DEPARTMENT 
ON DEPARTMENT.DEPTNUM=ACADEMIC.DEPTNUM 
GROUP BY UPPER(DEPARTMENT.STATE) 
HAVING COUNT(ACADEMIC.DEPTNUM) >= 20; 
+0

但是這也顯示了包含數量的第二列。有沒有辦法做到這一點,但只顯示國家? – james

+0

只需從選擇列表中刪除「,COUNT(ACADEMIC.DEPTNUM)FROM ACADEMIC」! (即做SELECT DEPARTMENT.STATE。) – jarlh

+0

謝謝!工作。 – james

0

我需要結合類似於狀態和他們的價值觀(如VIC和維克和VIC應該等於VIC 68)

您需要使用SUMGROUP BY(上/下)你的子查詢或簡單地使用UPPER/L OWER中的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 

既然你已經有了子查詢,讓你的計數,所有你需要使用UPPER /在組低 BY,使得計數將現在考慮類似的狀態

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;