다음 데이터를 조건에 의해서 기대 결과로 나오게 하는 쿼리

데이터 : 1, 2, 2, 3, 3, 4, 5, 5, 5

기대 결과 : 5, 1,2, 2, 3, 3, 4

#1 union all을 쓰는 방법

select * from tableA where itemid = 3605255 and name like '%.exe' group by type

UNION ALL

select * from tableA where itemid = 3605255 and isHidden != 1 and name not like '%.exe';

UNION ALL 관련 페이지 : http://intomysql.blogspot.com/2011/01/union-union-all.html

 

UNION과 UNION ALL 의 차이 및 주의 사항

ANSI SQL에서 제안하는 집합 연산 "UNION", "INTERSECT", "MINUS" 중에서 MySQL에서는 UNION 집합 연산만 제공 하고 있다. (하지만 MySQL에서 INTERSECT나 MINUS를 다른 형태의 쿼리로 풀어서 사용할 수 ...

intomysql.blogspot.com

19.5.14 추가사항

#1-1union 이 포함된 쿼리문에 정렬을 넣으려고 할 때

a. union 각 쿼리에 정렬을 한 다음에 합치는 방법

Select * from ( %1) UNION ALL Select * from ( %2 )

%1, %2가 각 정렬이 적용된 쿼리를 넣어서 사용한다.

b. union으로 합친 결과 물에 정렬을 적용하는 방법

Select * from (%1 UNION ALL %2 ) %3

%3에 "order by ..."을 적용한다.

 

 

#2 sqlite의 rowid를 사용하는 방법

select * from ( SELECT name, CASE when name like '%.exe' THEN 0 ELSE ROWID END id FROM tableA where itemid = 3605255 )x group by x.id order by x.id ASC;

오라클은 가상의 sequencial한 id가 존재하고 이것으로 정렬 등에 사용한다.

sqlite도 유사하게 rowid란 가상의 sequencail한 id가 있어서 사용할 수 있다.

rowid 개념 관련 글 : https://ohgyun.com/698 

 

sqlite: limit (오라클의 rownum 기능)

발생일: 2015.12.29 키워드: sqlite3, limit, oracle rownum 문제: sqllite 에서 오라클에서 제공하는 rownum 기능은 뭘까? 해결책: SQLite는 limit라는 기능을 제공한다. SELECT COL1, COL2 FROM TAB01 ORDER BY..

ohgyun.com

 

by 무위자연 2019. 5. 9. 14:18