group by란..

보통 group by 사용할대는 합계, 평균, 집계 등등 (CUBE, SUM,AVG, 등등 여러 용도가 있지만)

중복데이터 제거할때도 많이 사용된다

DISTINCT 써서 해결이 안될경우이다.



예를들면 사용자 물품구매나, 출석기록 같다고 해야할까?

사용자 테이블 A와 조인할 테이블 B를 가지고

사용자 아이디로 조인을 걸면

ID 

 DATA

 A

 1

 A

 2

 A 3

 B

 B1


이런식으로 나오게 되고

이것을 DATA별로

사용자

 DATA1

DATA2 

DATA3 

DATA4 

A

 1

 2

 3

 1

B

 B1

 B2

 B3

 B4

이렇게 원하고 싶어서 찾다보니 GROUP BY절에 대해서 하게 되었다.




1
2
3
4
5
6
7
8
9
10
11
 
SLEECT * FROM(
SELECT 사용자이름, 사용자아이디
  FROM 사용자테이블
) A1
  LEFT OUTER JOIN
  (SELECT 데이터, 사용자아이디
   FROM 데이터테이블
)B1
ON A1.사용자아이디 = B1.사용자아이디
)
cs

약간 이런식으로 쿼리를 작성하면

A,B에대한 테이블을 조인건다.

그러면 위의 표처럼 데이터가 나올것이고

이 조인건 테이블을 가지고 GRUOP BY를 적어본다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
SLEECT 
 MAX(A1.유저이름), 다른 조인할 컬럼명 명시 
-- ITERATOR나 해당 LEFT OUTER JOIN으로 더 붙이거나 ..날짜면 해당 일수만큼 빼서 붙이거나..
 
 
 FROM(
  SELCT 사용자이름, 사용자 아이디
  FROM 유저테이블
) A1
  LEFT OUTER JOIN
  (SELECT 데이터, 사용자아이디
   FROM 데이터테이블
)B1
ON A1.유저아이디 = B1.유저아이디
)
 
GROUP BY 조인할 컬럼명 명시. -- SELECT 절에서 GROUP BY함수쓴 컬럼은 적지 않는다.
cs



SELECT 절에서 GROUP BY 함수를 적용한 부분은 GROUP BY절에 적지 않는다.


잘 몰라서 여러가지 GROUP BY 에러를 보았다.

그리고 함수 계산할 곳이 없는데 어쩌지 라는 생각을 했는데

아예 가변적으로 사용자 아이디(PK) 값을 MAX 함수로 적으면 그룹으로 묶어지는구나 느꼇다.


더 좋은 방법이 있을지 모르나.. 일단은 이리 해결하였으니.. 나중에 더 공부해서 보면 이불킥을 하겠지 ㅠㅠ




'ORACLE' 카테고리의 다른 글

[Oracle] 만 나이 구하기  (0) 2018.02.28
[ORACLE] 1이하의 소수점 처리  (0) 2017.09.21
[ORACLE] UNION // INTERSECT 연습  (0) 2016.09.23
location.reload(); // 익스에서 느림
window.location.reload(); //크롬,익스 상관없음.



둘다 새로고침을 하는 fuction 인데

그냥 location.reload(); 로 실행하면 무언가 익스에서 로딩시간이 길어지는데
widnow.location.reload(); 하면 조금 빨라진 듯한 느낌이 든다.



찾게 된 이유는
데이터 등록후 리스트 화면에서 등록된 데이터를 클릭시 새탭이 생겨서
그부분을 막기위해서 적었다.

처음부터 내가 구현한 소스가 아니라서 어떠한 원인 때문에 새탭이 생기는지는 모르겠지만.. (게시물인데 첨부파일만 들어가면 상세조회시 새탭이 생긴..)

이상하게 새로고침하고 상세조회를 하면 잘나온다.(새탭없이..)

그래서 새로고침(reload) 함수를 찾아보게 되었고

속도차이로 인해서 아래 부분
Window.location.reload()를 적어본다.



이클립스 설치폴더\configuration\.settings 에 있는 org.eclipse.ui.ide.prefs 파일


MAX_RECENT_WORKSPACES=10 RECENT_WORKSPACES=D\:\\workspace\\test_0221_1 RECENT_WORKSPACES_PROTOCOL=3 SHOW_RECENT_WORKSPACES=false SHOW_WORKSPACE_SELECTION_DIALOG=true eclipse.preferences.version=1



*MAX_RECENT_WORKSPACES : 팝업창에서 보여줄 WORKSPACE수

*RECENT_WORKSPACES=최근에 연 WORKSPACE PATH 및 목록


*SHOW_WORKSPACE_SELECTION_DIALOG=true : 이클립스 실행시 팝업 유무 체크

(FALSE시 그냥 자동으로 최근의 WORKSPACE를 호출)




애니의 내용은

여중생 3명이서 놀이연구회 동아리를 만들어서 활동하는 이야기지만

상상도 못할 그림체와

상상도 못할 전개가

나의 생각회로를 바꾸었다.


총 12화로 정말 재미있게 주말의 시간을 비웠다 !!





시작은 이렇게 귀엽게 시작하지만 어느덧 보면 놀이를 목숨걸고 하게 되는 그들만의 진지함에 빠져들게 된다.




그림체의 예상을 못한점이 큰 반전 !~~

지하철에서 가볍게 보기 좋은 애니 !! 




1. 스팀 설정-> 다운로드 클릭 -> Steam 라이브러리 폴더 클릭





2. 라이브리리 폴더에 옮길 드라이브 경로 잡아주기




3. 라이브러리 탭으로 이동후 옮길 게임 선택 후 속성 클릭




4. 로컬파일 탭 클릭 -> 설치폴더 파일 이동 원하는 경로 선택후 '폴더이동' 클릭


5. 기다림 



*** 보통 ssd나 다른 하드디스크를 설치했을때 유용하게 쓴다. 저장된 게임기록까지 옮겨지니  좋다. !!****



function test(){
var date = $('.date').val();
var params =$('#Form').serializeArray();
params.push({name:"date", value:date});
$.ajax({
url: "test/test.action",
data: params,
type: "POST"
}).done(function(data){
alert("tesd");
});
}


Java에서 List로 받아서 처리할때 "setRequestAttr"

로 받아서 처리하게 되는데
해당 수정할 페이지에서는 버튼을 검색하여 특정날짜값의 데이터를 받아오는 것을 수정하게 되었다.

그래서 Form에서 특정 날짜값을 input date로 받은다음에

그것을 Java에서 처리하여 Query로 넘기는데

Ajax를 보내고도.. SetRequestAttr로 처리하려고 했으니 .. 당연히 처리가 안되었다.
(기존 method 에서 return 값확인도 안해봄..)..

그래서 좀 검색하다가 Ajax면 데이터를 Json으로 받아야한다는것을 찾고 난후

method를 Java에서 따로 분리하여 만든다음에

처리.



1
2
3
4
5
6
7
8
public String test() throws Exception{
        //test
        String test= parameters.getString("test");
        List testList = query 호출;(해당 회사, core마다 다를거라 생각).
                
        return JSON; // return Json이 중요.
    }
 
cs


이렇게 자바에서 해당 Parameter를 Ajax에서 받아와서 쿼리를 재가공한다음
Return Json으로 넘기니

Ajax의 done 부분에서 Data가 넘어왔다.

이제 나머지는 다른 예외처리및 다른부분 수정해야겠다.

초보적인. 기초적인거라 적어본다.. 멍청하게 이런걸로 시간잡아먹다나. ㅠㅠ


문제 : 가변적 div에 맞게 왼쪽의 div height를 조절해야함.


1
2
3
4
.div1{position: relative; width:750px}
.div2{position:absolute; width:50px; height: 99%; text-align:center }
.div3{margin-left:50px;}
 
cs



해결법

 큰 div를 먼저 그리고 그안에 가변적 div에 맞게 필요에 의한 부분을 absolute로 지정

그다음에 가변적 div를 옆으로 붙임


*div1 

   - postion:relative 선언, 부모 div로 가변적 div에 맞게 height 조절 

   - width는 환경에 맞게 수정

*div2 

 - postion:absolute : 절대적 위치를 고정

 - height: 100%를 출처글에서 강조하였으나 작업중 html에서 하단부분이 안맞어 99%로 지정.

 - text-align:  환경에 맞게 setting

 - width는 환경에 맞게 조절


*div3 

 - 가변적 div
 - div2와 너무 붙어있으면 겹치므로 margin을 줘서 약간의 여백 생성.


출처 : https://kldp.org/node/118838


resize 하던 도중 잘 안되어서 f12 개발자도구로 해당 css 건들다가


height를 강제로 줄이면 목록 line 나와서 구글링 하였더니 저렇게 속성조정이 가능하였다.


ex) 쿼리는 60줄을 뱉는데 jqgrid에서 line이40줄만 나올경우 해당 height를 조절하여 나오게 하였다.



Jqgrid 에서 height resize가 잘안될경우 강제로 css 조정



1
2
            $('#jqGridTableID).parents('div.ui-jqgrid-bdiv').css("max-height","600px");//강제로 css 조정
 
cs





참고 : https://stackoverflow.com/questions/11981174/how-to-resize-a-divs-max-height-upon-window-resize


**

input box 에서 readonly를 저장했을시 사용자가 수정을 못하게 html단에서 입력/수정이 금지하게 한다.

select box 에서도 input box의 readonly와 비슷한 disabled를 줘서 입력/수정 금지한다.


다만 select box에서 disabled 속성을 줄경우 post 통신할때 값이 안넘어가기 때문에

해당 disabeld 속성을 꼭 remove를 해줘야만 함.



ex)

1
2
3
4
5
6
7
/* INPUT */
 
//다중의 input 값을 받을때
$("input[name='test1'], input[name='test2']"'#form#).attr('readonly',true);
// 단일
$("input[name='test1'], '#form#).attr('readonly',true);
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*SELECT BOX*/
//다중의 SELECT 
$("select[name='TEST1'], select[name='TEST2']", #FORM#).attr("disabled""disabled");
 
//단일
$("select[name='TEST1']]", #FORM#).attr("disabled""disabled");
 
/*그리고 이벤트 넘어갈때 disabled를 풀어줘야함*/
 

fuction POST(){
//event function  실행시
/* 다중 select*/
 $("select[name='TEST1'], select[name='TEST2']", #FORM#).removeAttr("disabled""disabled");
 
/* 단일*/
 $("select[name='TEST1'] ", #FORM#).removeAttr("disabled""disabled");
 
}
 
cs


Action 에서 List를 가져와서 jsp에 jstl문으로 변환히 어렵다
그럴경우 하나의 Map을 생성하여
List에서 원하는 값을 추출하여 Map에 넣거나
아님 그 List를 Map으로 바뀌어서 처리하여도 된다.


1
2
3
4
5
6
7
8
List list = (query,params);
    for(int i=0; i<list.size(); i++){
        Map<String, Object> map = (Map<String, Object>) list.get(i); //list 컬럼 수만큼의 data 받기
        String data = map.get("컬럼명").toString();
//data를 가져와서 빈공간의 Map을 만들어서 JSTL에서 가능하게 적거나 원하는 데이터만 넣어서 jstl에서
//처리가능하게 끔 수정..
        
     }
cs


물론 회사마다 Query를 가져오는 service. core 부분이 다르겠지만

jsp에서 jstl("${map.컬럼명}") 으로 처리하기 위해서는

쿼리의 List를 map으로변환하여 처리해야함..



** 간단하지만 자주 안해보면 해매게 됨. ㅠㅠ 

'JAVA' 카테고리의 다른 글

[JAVA] 엑셀다운로드를 위한 API POI 공부!  (0) 2018.05.17
[JAVA] String 소수점 처리하기.  (0) 2018.05.14
Java 환경변수 설정  (0) 2017.08.09

+ Recent posts