안녕하세요! 해커랭크 Top Earners 문제에 관해 질문드리겠습니다. where 절에 서브쿼리를 사용할 때, select salary*months as earnings, count(*) from employee where salary*months = (select max(salary*months) from employee) 위의 코드를 작성했을때 group by 없이는 집계함수를 사용할 수 없다는 오류가 뜨는데, select count(*) from employee where salary*months = (select max(salary*months) from employee) select 에 count만 출력했을 때는 문제 없이 코드가 실행됩니다! count 단독으로 출력할 때는 전체 갯수만 파악하지만 salary*months 까지 같이 출력할 때는 해당 salary*months에 맞게 count를 해야해서 집계함수를 사용해야 하는 걸까요? 어짜피 max값만 가져와서 출력하는데도 group by를 꼭 사용해야 하는걸까요?
SELECT CASE WHEN A = B AND B = C THEN 'Equilateral' WHEN A + B <= C OR A + C <= B OR B + C <= A THEN 'Not A Triangle' WHEN A = B OR B = C OR A = C THEN 'Isosceles' ELSE 'Scalene' END FROM Triangles CASE문이 저렇게 Answer에 같이 떠서 안되는거같은데 어떻게 해야할까요?
안녕하세요! 영한님 강의 질 좋은 강의 너무 감사하게 보고 배우고 있습니다! 다름이 아니라, 엔터티 설계시 주의점 강의에서 setter를 사용하지 않기위해서 엔터티 설정을 아래와 같이 코드 수정을 해보았는데 이렇게 하는 게 더 안전한 방법인가요?? 실무에서도 이렇게 사용하는지 매우 궁금합니다..! Order 엔터티 public class Order{ ... public void addOrderItem(OrderItem orderItem){ orderItems.add(orderItem); // orderItem.setOrder(this); OrderItem.builder() .order(this) .build(); } public void setDelivery(Delivery delivery){ this.delivery = delivery; // delivery.setOrder(this); Delivery.builder() .order(this) .build(); } } OrderItem 엔터티 ... @NoArgsConstructor public class OrderItem { ... @Builder public OrderItem(Order order){ this.order = order; } }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] @JoinColumn(name="parent_id") 의 parent_id 는 어디서의 column을 의미하는건가요?? @Column(name="parent_id") 부분이 없는거 같은데 어디서 parent_id의 컬럼이 만들어져서 이것과 join을 하는건지 궁금합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 Member 객체에 대하여 질문 있습니다. 테스트 코드의 경우 Member member = new Member(); 이런식으로 Member 인스턴스를 생성해서 member.setName("spring"); 이런식으로 쓰이는건 이해가 되는데요 Member 클래스 에서나 MemoryMemberRepository 에서나 따로 member라는 참조변수로 Member()라는 인스턴스(Member member = new Member();와 같은것들)를 생성하지 않았는데 바로 아랫줄에서 member.setId(++sequence);가 쓰일수 있는건지 궁금합니다.
안녕하세요 강의 잘듣고있습니다. 주문서비스에서 cancel이 발생하면 위 Order 엔티티에서 delivery 객체 배송상태 검증 부분이 있는데 Order 와 Delivery 연관관계 매핑시 FetchType.LAZY로 설정되어있으니 잘못검증되는건 아닌가요? jpql로 fetch join으로 가져와야 하는 케이스아닌가해서요
Select Distinct s.hackers, h.name , s.final From ( Select hackers, sum(maxscore) over (partition by hackers) as final From ( Select Distinct hacker_id as hackers, challenge_id, max(score) over (partition by hacker_id, challenge_id) as maxscore From Submissions ) sub ) s Inner join Hackers h on h.hacker_id = s.hackers Where s.final > 0 Order by s.final desc
안녕하세요! querydsl 강의를 보고 실무에 적용 하던 중 중첩 객체에 대해서 한번의 join query로 만들 수 없을지 궁금하여 질문 드립니다. 만약, A -< B -< C (-< 은 one to many 를 의미) 관계를 가진 객체가 있다고 할 때 selectFrom(A) .leftJoin(A.B) .leftJoin(A.B.C) .where(A.id.eq(1)) .fetch(); 위 코드의 반환 값이 아래와 같기를 희망 하는데요 A = { id: 1, Bs: [ { id : 1, Cs : [ { id: 1 } ] } ] } oneToMany를 조인 하게 되면, SQL은 many의 row를 반환하게 되면서, A객체가 B의 갯수만큼 반환 되게 됩니다. group by등을 통해 해결 하려 했을 때는, oneToMany 컬렉션들이 모두 불러와지지 않는것을 확인 하였고, group by를 활용 하지 않고, 모든 row를 불러와서 aggregate하는 방식으로 코드를 구현 했습니다. 매번 쿼리문을 작성할 때 마다 aggregate하는 코드를 작성하는 것은 옳지 않을 것 같아, 혹시 더 나은 방법이 있을지 문의 드립니다. 혹시 중첩 쿼리를 join 으로 모두 찾아 객체에서 맵핑하려는 시도가 bad practice라면 쿼리 숫자가 늘어나더라도, findByAId, findByBId 등의 방식으로 여러번 쿼리를 하고, 중간에 캐시 레이어를 두는것이 더 나을지도 궁금 합니다. 항상 좋은 강의 감사합니다 :)
안녕하세요 4일차 공부를 하던중 willpay를 cart 에서 밖으로 꺼내 willpay-index.tsx 로 변경하게 되면서 이러한 오류가 뜨면서 장바구니가 담아지지 않습니다.(장바구니가 비어있을 때는 비어있다는 텍스트는 출력이됩니다) 코드상 오류 표시는 안나는데 해결이 안되서 여쭤봅니다. 감사합니다.
200여개의 csv 파일이 있습니다. (용량은 각각 1메가에서 120메가 - 최대 100만건 데이터 등등 ). 결측치 가 있어서 판다스 에서 불러들여서 정리하고 for 반복문으로 파일 개별적으로 읽어 들여와 장고 모델에 save() 로 입력시키는 작업을 진행하고 있습니다. 초반 10여개 파일까지는 제법 속도가 나오는데 (7만행 데이터 20분 소요) 이후로 속도가 급격하게 감소해서 24시간 돌려서 30메가 파일 겨우 저장 중입니다(1건에 1초씩 걸리네요 ㅠㅠ). 개발중이라 로컬에 있는 장고 내장 sqlite 사용 했습니다. 속도를 좀 더 빠르게 하는 방법이 있을까요? 3일째 검색 해봤는데 별다른 해결책이 보이지 않아서 질문 남겨 봅니다. app.py # new 폴더에 정리된 csv 파일을 읽어서 DB에 저장 import pandas as pd # django 프로젝트에 있는 settings.py 파일을 읽어서 환경변수로 설정 import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dbking.settings") import django django.setup() #django 프로젝트에 있는 models.py 파일에서 BasicData 클래스를 읽어온다 from common.models import BasicData # new 폴더에 있는 파일명을 읽어서 product 변수에 리스트에 저장 product_list = os.listdir("./script/newdb") # product_list 에 csv 파일 정렬(오름차순) for x in product_list: # csv 파일 하나씩 읽어오기 df = pd.read_csv("./script/newdb/" + x, encoding="cp949") # 결측치를 0으로 채운다 df = df.fillna(0) for a in list_of_csv: # 파일마다 컬럼수가 달라서 remark1, remark2 라는 예비컬럼 2개 추가 # -> 인덱스 에러 나는 경우 0 으로 저장 if a[16] is None: a.insert(16, 0) a.insert(17, 0) elif a[17] is None: a.insert(17, 0) # DB에 저장 try: db_insert = BasicData( opnSvcId = a[2], opnSfTeamCode = a[3], mgtNo = a[4], fileNumber = fileNumber, businessType = businessType, opnSvcNm = a[1], apvPermYmd = a[5], confirmNumber = a[6], businessCondition = a[7], siteTel = a[8], sitePostNo = a[9], siteWhlAddr = a[10], rdnWhlAddr = a[11], rdnPostNo = a[12], bplcNm = a[13], latitude = a[14], longitude = a[15], remark1 = a[16], remark2 = a[17], ) i += 1 # print(i) except Exception as e: print("쿼리", e) continue #DB에 저장 입력 try: db_insert.save() except Exception as e: print("저장중에러",e) continue from django.db import models class BasicData(models.Model): # 개방서비스아이디 opnSvcId = models.CharField(max_length=100) #개방자치단체코드 opnSfTeamCode = models.CharField(max_length=10) # 관리번호 mgtNo = models.CharField(max_length=100) #파일번호 fileNumber = models.IntegerField() #업종명 businessType = models.CharField(max_length=100) #개방서비스명 opnSvcNm = models.CharField(max_length=100) #인허가일자 apvPermYmd = models.DateField() #영업상태구분코드(1-정상, 2-폐업, 3-휴업, 4-전환) confirmNumber = models.IntegerField() #영업상태명 businessCondition = models.CharField(max_length=100) #소재지전화 siteTel = models.CharField(max_length=100) #우편번호 sitePostNo = models.CharField(max_length=100) #주소 siteWhlAddr = models.CharField(max_length=100) #도로명주소 rdnWhlAddr = models.CharField(max_length=100) #도로명우편번호 rdnPostNo = models.CharField(max_length=100) #사업장명 bplcNm = models.CharField(max_length=100) # 위도 latitude = models.FloatField() # 경도 longitude = models.FloatField() #비고1 remark1 = models.CharField(max_length=100) #비고2 remark2 = models.CharField(max_length=100) # 생성시점 created = models.DateTimeField(auto_now_add=True) update = models.DateTimeField(auto_now=True) def save(self, *args, **kwargs): queryset = BasicData.objects.filter(mgtNo__exact=self.mgtNo) # 중복된 이름이 없을 때만 저장 if len(queryset) == 0: super().save(*args, **kwargs) print('> Created new category') # if '&' in self.addr: # self.addr = self.addr.replace('&', ' ') # self.save() # 중복된 카테고리 있을 시 저장 안함 else: print('> Cannot create category with existing name') def __str__(self): return self.name
안녕하세요! 강의를 듣다가 궁금한것이 생겨서 문의 드립니다. -- 부서명 SALES와 RESEARCH 소속 직원별로 과거부터 현재까지 모든 급여를 취합한 평균 급여 select b.empno, max(b.ename) as ename, avg(c.sal) as avg_sal --, count(*) as cnt from hr.dept a join hr.emp b on a.deptno = b.deptno join hr.emp_salary_hist c on b.empno = c.empno where a.dname in('SALES', 'RESEARCH') group by b.empno order by 1; 여기서 왜 max(b.ename) 이라고 해야하는지 잘 이해가 안가서 문의 드립니다..! 감사합니다.
unittest 기반의 Unit Test시 Celery 혹은 ProcessPoolExecutor을 이용하면 해당 Context에서 DB 접근 시, Test DB를 참조 하는 것이 아니라 settings의 Default로 설정해놓은 Exist DB에 접근하는 이슈가 있더군요. 해당하는 경우 어떻게 해야 Test DB로 붙어서 작업할 수 있을까요? with concurrent.futures.ProcessPoolExecutor() as executor:
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 만약 allocationSize = 50 으로 잡고 애플리케이션을 올렸는데요 값자기 그 id(pk) 값이 1~2 올라가다가 서버가 다운되서 다시 올리면 53인가 부터 시작이잖아요? 그럼 2~52 까지의 pk 값은 안쓰고 계속 올라가는게 맞을까요? 실무에서 궁금합니다.