묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
- 
      
        
    해결됨실전 jOOQ! Type Safe SQL with JavadslContext 작성 시 fetchGroups 이렇게 작성해도 될까요?fun findActorFilmography(searchOption: ActorFilmographySearchOption): List<ActorFilmography> { val actorListMap = dslContext.select( ACTOR, FILM, ).from(ACTOR) .join(FILM_ACTOR).on(ACTOR.ACTOR_ID.eq(FILM_ACTOR.ACTOR_ID)) .join(FILM).on(FILM.FILM_ID.eq(FILM_ACTOR.FILM_ID)) .where( containsIfNotBlank(ACTOR.FIRST_NAME.concat(" ").concat(ACTOR.LAST_NAME), searchOption.actorName), containsIfNotBlank(FILM.TITLE, searchOption.filmTitle), ) // 이 부분!! .fetchGroups( { record -> record[ACTOR.name, Actor::class.java] }, { record -> record[FILM.name, Film::class.java] } ) return actorListMap.entries .map { entry -> ActorFilmography(entry.key, entry.value) } } private fun containsIfNotBlank(field: Field<String?>, inputValue: String?): Condition { if (inputValue.isNullOrBlank()) { return DSL.noCondition() } return field.likeRegex(inputValue) }alias을 사용하지 않고, name으로 추출해봤더니 데이터가 정상적으로 잘 나와서요!! 혹시나 예외 케이스도 있을 수 있을 것 같아 질문합니다! 
- 
      
        
    해결됨실전 jOOQ! Type Safe SQL with Javaupdate with dto 질문안녕하세요 강사님update, delete를 통한 데이터 수정, 삭제 강의를 듣는 도중 이상한 점이 있는것 같아 질문드립니다.update with dao 설명 중 var firstname과 var lastname의 반환값이 Filed<String>이 된다는 설명(약 7분정도)을 해주셨고 값이 없을때는 무시가 된다고 하셨는데,7분 33초쯤에 로그를 아래 제가 첨부한 사진과 같이 나옵니다.last_name이 TTTTT로 되어있습니다.편집상의 오류인지 로그 출력이 왜 저런지 의문이 들어 질문드립니다. 
- 
      
        
    해결됨실전 jOOQ! Type Safe SQL with JavaR2DBC 환경에서 jOOQ generate 된 Dao를 사용할 수 있는 방법이 있을까요?jOOQ generate을 통해서 생성된 Dao를 기반으로 R2DBC 환경에서 테스트를 진행할 때 findAll(), findById() 등 뒤에 fetch()가 붙어서 Blocking 방식으로 DB에 접근하게 되어 있었습니다.fetch() 코드를 들어가서 확인하였을 때 아래와 같았습니다. @Blocking <E> @NotNull List<E> fetch(RecordMapper<? super R, E> var1) throws DataAccessException; 그래서, jOOQ 공식 사이트에서 찾아보았을 때 아래와 같이 reactor fecth()가 가능하다는 것은 확인하였습니다.https://www.jooq.org/doc/latest/manual/sql-execution/fetching/reactive-fetching/ Dao을 적용해서 Reactor 방식으로 진행할 수 있는 방법은 없을까요??또한, Reactor Fetch 방식으로 실행하였을 때 디버깅 로그가 찍히지 않는 문제가 발생하고 있는데 이것에 대해서도 해결 방법이 있을까요???Configuration이 적용되지 않는 것 같아서 아래와 같이 설정도 해보았지만 적용되지는 않았습니다. import io.r2dbc.spi.ConnectionFactory; ... @Configuration public class JooqConfig { public final ConnectionFactory connectionFactory; public JooqConfig(ConnectionFactory connectionFactory) { this.connectionFactory = connectionFactory; } ... @Bean public DSLContext jooQDSLContext() { DSLContext dsl = DSL.using(connectionFactory).dsl(); dsl.configuration().set(PerformanceListener::new); dsl.settings().withRenderSchema(false); return dsl; } 
- 
      
        
    미해결Database - SQLMySQL 실습CUSTOMER ID FORMATTING- 1: 00001- 2: 00002- 13: 00013SELECT CUSTOMERID, CONCAT(REPEAT('0', 5-LENGTH(CUSTOMERID)), CUSTOMERID)FROM CUSTOMER;MySQL은 문자열 + 하기 연산이 없어서CONCAT 함수를 사용해야 합니다 
- 
      
        
    해결됨실전 jOOQ! Type Safe SQL with JavaIDE로 스프링부트 실행없이 jooq로 짠 쿼리 결과를 바로 확인하는 방법이 있을까요?jOOQ를 공부하면서 너무 편하게 쿼리를 작성하고 있는데 한가지 불편한 점이 있어서 질문 드립니다. 단순 쿼리 결과를 확인하고 싶은 경우 마이바티스는 xml에 짠 쿼리를 DB 스키마와 바로 연결해 스프링부트를 띄울 필요 없이 intelliJ IDE에서 쿼리를 날리고 서비스 탭에서 쿼리 결과를 보여주도록 할 수있는데, jOOQ는 자바 코드로 되어 있어서 이렇게 IDE에서 바로 쿼리 결과를 확인해볼 수 없더라구요. 테스트코드로 실행한 후 나간 쿼리를 직접 sql 콘솔에 찍어 결과를 보거나, 강의 마지막에 알려주신 jooq SQL 변환 사이트로 자바 코드로 되어있는 jooq 구문을 sql로 변환해서 sql 콘솔에서 실행하는 방법 말고 더 편리한 방법이 있는지 궁금합니다. 
- 
      
        
    미해결데이터 분석 SQL Fundamentals다양한 window절의 이해 -01, 02윈도우 절 코드 실습 중입니다.select product_id, product_name, category_id , unit_price, sum(unit_price) over (partition by category_id order by unit_price rows between 1 preceding and 1 following) as unit_price_sum from products;위 코드는 제공해주신 base 코드입니다. 해당 unit_price_sum을 소수점 둘째자리 까지만 표시하고자 round 함수를 썼는데,round(sum(unit_price) over (partition by category_id order by unit_price rows between 1 preceding and 1 following), 2) as unit_price_sum from products; "SQL Error [42883]: 오류: round(real, integer) 이름의 함수가 없음 Hint: 지정된 이름 및 인자 자료형과 일치하는 함수가 없습니다. 명시적 형변환자를 추가해야 할 수도 있습니다."이와 같은 에러가 납니다. 그래서 with절로 해당 unit_price_sum을 temp_01이라는 임시 쿼리에 담아서 아래와 같이 했지만 이래도 위 오류와 동일하게 나오면서 되지 않네요with temp_01 as(select avg(unit_price) over (partition by category_id order by unit_price rows between 1 preceding and 1 following) as unit_price_avg from products) select round(temp_01.*, 2) from temp_01;select product_id, product_name, category_id, unit_price,avg(unit_price) over (partition by category_id order by unit_price rows between 1 preceding and 1 following) as unit_price_avg from products; 하는 방법이 있을까요? chat gpt도 서브쿼리로 답을 제공했는데 동일한 문제가 발생했습니다. 
- 
      
        
    해결됨장래쌤과 함께하는 쉽고 재미있는 SQL 이야기pdf 문의드립니다안녕하세요 강사님혹시 강의 pdf는 따로 다운하는 곳이 있을까요? 
- 
      
        
    해결됨초보자를 위한 BigQuery(SQL) 입문활용편 급합니다.....활용편 언제 나오나요급합니다.... 빨리 내놓으십쇼..유료로 내주셔도 긁겠습니다 
- 
      
        
    해결됨초보자를 위한 BigQuery(SQL) 입문오류다음과 같이 실행했는데 오류가 뜨는데, 이유가 무엇일까요? SELECT * IF(speed >= 70, "빠름", "느림") AS Speed_Category FROM `inflearn-bigquery-practice.basic.pokemon` Syntax error: Expected end of input but got keyword IF at [3:3] 
- 
      
        
    미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스락과 트랜잭션 격리수준 차이는 뭔가여?db커넥션 여러개가 접근해야 할때 락을 사용해야 하나여아니면 트랜잭션 격리수준의 높은레벨을 사용해야 할까요 둘의 차이를 모르겠습니다 ㅠ 
- 
      
        
    해결됨오라클 SQL 데이터베이스애플 silicon 컨테이너 실행 시 오타있습니다jinkyuoung x -> jinkyoung o 
- 
      
        
    해결됨실전 jOOQ! Type Safe SQL with Javabuild.gradle.ktsplugins { id("org.springframework.boot") version "3.3.0" id("io.spring.dependency-management") version "1.1.5" kotlin("jvm") version "1.9.24" kotlin("plugin.spring") version "1.9.24" id("nu.studer.jooq") version "9.0" } group = "com.sight" version = "0.0.1-SNAPSHOT" java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } repositories { mavenCentral() } dependencies { implementation("org.springframework.boot:spring-boot-starter-jooq") implementation("org.springframework.boot:spring-boot-starter-web") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") implementation("org.jetbrains.kotlin:kotlin-reflect") runtimeOnly("com.mysql:mysql-connector-j") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.jetbrains.kotlin:kotlin-test-junit5") testRuntimeOnly("org.junit.platform:junit-platform-launcher") jooqGenerator("com.mysql:mysql-connector-j") jooqGenerator("org.jooq:jooq") jooqGenerator("org.jooq:jooq-meta") } kotlin { compilerOptions { freeCompilerArgs.addAll("-Xjsr305=strict") } } tasks.withType<Test> { useJUnitPlatform() } val dbUser: String = System.getProperty("db-user") ?: "root" val dbPassword: String = System.getProperty("db-passwd") ?: "passwd" jooq { configurations { create("sakilaDB") { generateSchemaSourceOnCompilation.set(false) // 기본적으로 스키마 소스 생성을 비활성화합니다. jooqConfiguration.apply { jdbc.apply { driver = "com.mysql.cj.jdbc.Driver" url = "jdbc:mysql://localhost:3306/sakila" user = dbUser password = dbPassword } generator.apply { name = "org.jooq.codegen.KotlinGenerator" // 코틀린 제너레이터 명시 database.apply { name = "org.jooq.meta.mysql.MySQLDatabase" inputSchema = "sakila" } generate.apply { isDaos = true isRecords = true isFluentSetters = true isJavaTimeTypes = true isDeprecated = false } target.apply { directory = "src/generated" } } } } } } sourceSets { main { kotlin { srcDirs(listOf("src/main/kotlin", "src/generated")) } } } 3.3.0 버전은 jooq 최신버전을 사용하고 있는 것 같아서 group 재설정은 뺐습니다. 
- 
      
        
    해결됨실전 jOOQ! Type Safe SQL with Java마리아 DB 쓰시는분들은 mysql 파일 쓰시면됩니다.저는 마리아 db 사용해서 mysql 파일 사용하니 잘 됩니다. 
- 
      
        
    미해결데이터 분석 SQL Fundamentalshaving절에서 alias 사용은 안되는건가요?- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.Group By 실습 -01 강의 ,1분 20초select deptno, max(sal) as maxsal , min(sal) as minsal, round(avg(sal),2) as avgsal from hr.emp egroup by e.deptno having round(avg(sal), 2) >=2000;avgsal >= 2000 을 사용하려했는데, 안되더군요. 원래 having절에서는 안되나요? 
- 
      
        
    해결됨실전 jOOQ! Type Safe SQL with Java영상 소리가 작아졌습니다.Sakila DB를 기반으로 DB 구성하기 챕터 영상의 소리가 앞선 영상에 비해 매우 작네요! 
- 
      
        
    해결됨장래쌤과 함께하는 쉽고 재미있는 SQL 이야기regexp like 에 특정 특수기호 포함안녕하세요 강사님! 컬럼에 특수기호 중 + (플러스) 문자가 포함된 값을 찾으려고하는데요 정규식에 해당 기호를 쓰면 오류가 발생하는데 어떻게 해당 문자만 골라 뽑을 수 있을지 질문드립니다 . 
- 
      
        
    해결됨데이터 분석 SQL Fundamentals데이터엔지니어 역량안녕하세요. sql기초를 닦고 데이터테크놀리지학과에 재학중인 학생입니다. 제가 궁금한부분은 다음관같아요.백엔드부분은 어디까지 알면 좋을까요?데이터엔지니어를 희망하며 Sql공부중이고,Spark,kafka,airflow같은 부분도 공부를 해야할텐데. 비중을 저는 백엔드(java spring jpa) 보단 당연히 sql,spark,kafka,airflow에 실어야된다고 생각해요. 비중을 이쪽에 실으되, 백엔드(java spring jpa)공부도 하긴해야할텐데 어느정도까지는 그래도 해야된다.할줄알아야한다.이런게 있을까요?아니다. 잘못알고있다.둘다잘해야한다.? 할게많아서 다하기 쉽지 않을것같아서 고민입니다. . Spring jpa도 비중있게 공부해야한다면 지금 조금 학습한상태에서 +스프링db(JdbcTemplate, MyBatis 같은 SQL 매퍼 기술 부터, JPA, 스프링 데이터 JPA, Querydsl, 쓰레드로컬, 스프링aop),스프링활용(스프링 부트와 JPA를 활용해서 웹 애플리케이션 개발, rest api개발),스프링부트, 스프링 데이터jpa, 이정도 계획입니다. 부족할까요? 과할까요정보의 홍수에서 권철님 선생님의 조언이 제 올바른 방향의 길잡이에 큰 도움이 될것같습니다. 감사합니다 
- 
      
        
    미해결데이터 분석 SQL Fundamentals4강, 6강 실습용 스키마 관련강의 재생이 안되요다른 강의는 재생이되는데, 4강(9분) 6강(4분)은 재생 되지 않습니다. 영상 확인 부탁드립니다. 추가로 다른 강의들도 재생이 안되네요. 이전에 잘만 됬었는데..캐시, 쿠키등 삭제했고 강력 새로고침 해봤고, 다른 브라우저로 이용해보기도 했음에도 안됩니다. 
- 
      
        
    미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]강의 화면이 안나옵니다.다수의 강의들이 화면이 아래 그림과 같이 나오지 않습니다. 일부 강의는 잘 나오고 일부 강의는 음성만 나오네요. 
- 
      
        
    해결됨초보자를 위한 BigQuery(SQL) 입문총 정리 문제 풀이 5번에 관해 질문안녕하세요.총 정리 문제 풀이 5번의 선생님의 쿼리와, 해설을 보기 전에 개인적으로 써본 쿼리의 각각의 결과가 달라 어디서 오류를 범했는지 알고 싶어 질문합니다. 선생님께서 쓰신 쿼리는 다음과 같았습니다.WITH에서 먼저 trainer_pokemon과 pokemon을 JOIN한 후, 마지막에 trainer를 JOIN하셨습니다.결과는 Kyle의 포켓몬 공격력+방어력 총합 1951였습니다.WITH total_stats AS ( SELECT tp.trainer_id, SUM(p.attack + p.defense) AS total_stat, FROM basic.trainer_pokemon AS tp LEFT JOIN basic.pokemon AS p ON tp.pokemon_id = p.id GROUP BY tp.trainer_id ) SELECT t.name, ts.trainer_id, ts.total_stat FROM total_stats AS ts LEFT JOIN basic.trainer AS t ON ts.trainer_id = t.id ORDER BY total_stat DESC LIMIT 1 그리고 저는 다음과 같이 썼습니다.선생님의 순서와 다르게, WITH에서 먼저 trainer_pokemon과 trainer를 JOIN한 후, 마지막에 pokemon을 JOIN했습니다.결과는 Kyle의 포켓몬 공격력+방어력 총합 1856였습니다.WITH pokemon_cnt_table AS( SELECT t.id, t.name, tp.pokemon_id, COUNT(tp.id) AS pokemon_cnt, FROM `basic.trainer_pokemon` AS tp LEFT JOIN `basic.trainer` AS t ON tp.trainer_id = t.id GROUP BY t.id, t.name, tp.pokemon_id ) SELECT pct.id, pct.name, SUM(attack) AS attack_sum, SUM(defense) AS defense_sum, SUM(attack + defense) AS a_plus_d_sum, FROM pokemon_cnt_table AS pct LEFT JOIN `basic.pokemon` AS p ON pct.pokemon_id = p.id GROUP BY pct.id, pct.name ORDER BY a_plus_d_sum DESC LIMIT 1 결과가 달라진 이유에 대해, 제 나름대로 생각해 본 것은, JOIN의 순서가 달라 WITH 내의 1) SELECT, 2) FROM ON의 키도 다른 점이 출력 데이터에 영향을 준 것이 아닐까 하는 것입니다. JOIN의 순서 차이로 결과가 달라질 수 있을까요?제가 작성한 쿼리의 오류에 대한 확인이 번거로우시다면, 결과에 대한 JOIN 순서 차이의 영향 유무에 대해서만 답해 주셔도 감사하겠습니다. 미리 감사합니다. 
