Oracle에서 백분위수를 계산할 때 사용할 수 있는 주요 함수와 활용 방법에 대해 정리해 보겠습니다.
PERCENTILE_CONT 함수
`PERCENTILE_CONT` 함수는 연속적인 값을 기반으로 특정 백분위수를 계산하는 함수입니다. 예제는 다음과 같습니다:
SELECT PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY column_name) FROM table_name;
하지만 `PERCENTILE_CONT`는 **상수 값**만을 매개변수로 받을 수 있어 동적으로 값을 변경하기 어렵습니다.
동적으로 백분위 값 설정하기
`PERCENTILE_CONT`의 매개변수를 동적으로 설정하는 방법은 제한적이지만 다음과 같은 방법을 고려할 수 있습니다:
PL/SQL을 활용한 동적 SQL 실행
WITH 절을 이용한 사전 백분위값 계산
APPROX_PERCENTILE을 활용하여 근사값 반환
예를 들어, `WITH` 절을 활용하여 여러 백분위수를 계산할 수 있습니다:
WITH PercentileData AS ( SELECT column_name, PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY column_name) AS percentile_25, PERCENTILE_CONT(0.50) WITHIN GROUP (ORDER BY column_name) AS percentile_50, PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY column_name) AS percentile_75 FROM table_name ) SELECT * FROM PercentileData;
APPROX_PERCENTILE 활용
Oracle 12c 이상에서는 `APPROX_PERCENTILE`을 활용하여 대량 데이터에서 빠르게 근사 백분위수를 계산할 수 있습니다.
SELECT APPROX_PERCENTILE(column_name, 0.75) FROM table_name;
이 함수는 빠른 성능을 제공하지만 `PERCENTILE_CONT`보다 정확성이 조금 낮을 수 있습니다.
결론
`PERCENTILE_CONT`를 동적으로 활용하는 것은 어렵지만, `WITH` 절을 이용한 미리 계산된 값 활용, `EXECUTE IMMEDIATE`를 통한 PL/SQL 실행, `APPROX_PERCENTILE`을 통한 근사값 추출 등의 방법을 사용할 수 있습니다.
#스하리1000명프로젝트,
A veces es difícil hablar con trabajadores extranjeros, ¿verdad?
¡Hice una aplicación sencilla que ayuda! Escribes en tu idioma y los demás lo ven en el suyo.
Se traduce automáticamente según la configuración.
Súper útil para chatear fácilmente. ¡Echa un vistazo cuando tengas la oportunidad!
https://play.google.com/store/apps/details?id=com.billcoreatech.multichat416
Android에서 Hilt + Room + Firebase Realtime Database를 함께 사용하는 구조 설계
앱의 사용자 정보 저장 화면 예씨
이 글은 Android 앱에서 Hilt를 사용한 의존성 주입, Room으로 로컬 DB를 구성하고, Firebase Realtime Database로 클라우드와 데이터를 연동하는 구조를 설계하는 방법을 다룹니다. 예시 코드마다 구체적인 설명과 함께, 주의사항과 실무 팁도 포함되어 있습니다.
🧱 프로젝트 구조 개요
📁 app/ ├── di/ // Hilt 모듈 정의 ├── data/ │ ├── local/ // Room 관련 코드 │ ├── remote/ // Firebase 관련 코드 │ ├── repository/ // Repository 패턴 구현 │ └── mapper/ // Entity ↔ Domain 변환 ├── domain/ // 앱 전반에서 쓰이는 공통 데이터 모델 ├── ui/ // Compose UI 화면 ├── viewmodel/ // ViewModel 정의 └── MainActivity.kt
💡 팁: 레이어를 분리함으로써 유지보수가 쉬워지고, 테스트도 용이해집니다. 특히 Firebase와 Room을 함께 쓸 때는 'source of truth'를 명확히 구분해야 합니다.
📦 1. 도메인 모델 Member
data class Member( val name: String = "", val tokenId: String = "", val role: String = "member", val status: String = "", val nextMatchIn: Int = -1, val opponent: String = "", val lat: Double = 0.0, val lon: Double = 0.0 )
설명: 이 모델은 Room이나 Firebase에 의존하지 않는, 순수한 앱 로직 전용 데이터 모델입니다. ViewModel이나 Repository, Firebase 직렬화에 모두 사용될 수 있습니다.
주의: Firebase Realtime Database는 직렬화 시 기본 생성자와 모든 속성의 기본값을 요구하므로, = "", = -1 등을 반드시 지정해 주어야 합니다.
🏠 2. Room Entity MemberEntity
@Entity(tableName = "members") data class MemberEntity( @PrimaryKey(autoGenerate = true) val id: Int = 0, val name: String, val tokenId: String, val role: String, val status: String, val nextMatchIn: Int, val opponent: String, val lat: Double, val lon: Double )
설명: Room은 반드시 @Entity와 @PrimaryKey가 필요합니다. 여기서는 id를 자동 생성 키로 사용하고, tokenId는 일반 필드로 처리합니다.
주의: Firebase의 tokenId는 앱 재설치 등으로 변경될 수 있기 때문에, 고유 식별자로 사용하지 말고 별도로 auto-generated ID를 쓰는 게 안전합니다.
🔁 3. Mapper 함수
fun Member.toEntity(): MemberEntity = MemberEntity( name, tokenId, role, status, nextMatchIn, opponent, lat, lon )
fun MemberEntity.toDomain(): Member = Member( name, tokenId, role, status, nextMatchIn, opponent, lat, lon )
설명: Room Entity와 앱 전용 모델 간에 변환을 책임지는 함수입니다. 이 함수를 통해 구조가 다르거나 어노테이션 충돌 없이 안전하게 변환할 수 있습니다.
#스하리1000명프로젝트,
Nawala sa Korea? Kahit na hindi ka nagsasalita ng Korean, tinutulungan ka ng app na ito na madaling makalibot.
Sabihin lang ang iyong wika—ito ay nagsasalin, naghahanap, at nagpapakita ng mga resulta pabalik sa iyong wika.
Mahusay para sa mga manlalakbay! Sinusuportahan ang 10+ wika kabilang ang English, Japanese, Chinese, Vietnamese, at higit pa.
Subukan ito ngayon!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127
#billcorea #운동동아리관리앱
🏸 Schneedle, ¡una aplicación imprescindible para los clubes de bádminton!
👉 Match Play: registra puntuaciones y encuentra oponentes 🎉
¡Perfecto para cualquier lugar, solo, con amigos o en un club! 🤝
Si te gusta el bádminton, definitivamente pruébalo.
Ir a la aplicación 👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay