2015-10-07 3 views
0

Моя цель состоит в том, чтобы отображать состояния, которые имеют 20+ значения во втором столбце. В настоящее время я смог отображать состояния и значения, но мне нужно объединить состояния, которые похожи и их ценности (например, VIC, Vic и vic должны быть равны 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

Думаю, вы не сделаете это в БД. Это только материал для презентации. См. Http://stackoverflow.com/a/32882720/5070879 – lad2025

+0

Вам нужны ** SUM ** и ** GROUP BY (UPPER/LOWER) **. –

ответ

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, чтобы возвращать только строки, где счетчик равен 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" из списка выбора! (I.e. SELECT DEPARTMENT.STATE.) – jarlh

+0

Спасибо! работал. – james

0

Мне нужно объединить государства, которые подобны и их значения (например, VIC и Вику и Вику должна равняться VIC 68)

Вы должны использовать SUM и GROUP BY (верхний/нижний) на вашем подзапроса или просто использовать ВЕРХНИЙ/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 

Поскольку у вас уже есть подзапрос, который дает вам счет, все, что вам нужно использовать ВЕРХНИЙ/НИЖНИЙ в GROUP 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;