(Problem 2)
{
"sin": 49024,
"branchName": "Berlin",
"salary": 3349,
"Salary Diff": "86862"
},
JSON
복사
json 파일 보니까 이렇게 되어 있는데, 그러면
select E.sin, B.branchName, E.salary,
((SELECT salary FROM Employee WHERE sin = B.managerSIN) - E.salary) AS 'Salary Diff'
SQL
복사
이렇게 컬럼명도 맞춰줘야 하는 건가요??
네! 맞습니다.
아웃풋 컬럼명에 띄어쓰기가 있을 때 띄어쓰기 처리 때문에 문제가 있는 것 같은데, 해결책이 알고 싶습니다.
제가 만든 2번 쿼리
SELECT e.sin, b.branchName, e.salary, (e2.salary - e.salary) AS `Salary Diff`
FROM Employee e
JOIN Branch b ON e.branchNumber = b.branchNumber
JOIN Employee e2 ON e2.sin = b.managerSIN
WHERE b.branchName IN ('London', 'Berlin')
ORDER BY `Salary Diff` DESC
LIMIT 10;
SQL
복사
DataGrip 답변
그런데 prisma.$queryRaw``때문에 쿼리 안에서 `기호를 쓸 수가 없어서 쿼리를 checker에 집어넣을 수가 없습니다.
14번의 답은
[
{
"sum of employees salaries": "343460"
}
]
JSON
복사
제가 만든 쿼리
SELECT SUM(salary) AS "sum of employees salaries"
FROM Employee e JOIN Branch b ON e.branchNumber = b.branchNumber
WHERE b.branchName = 'Moscow'
SQL
복사
DataGrip에서 나온 답변
이렇게 “”를 써도 채점기가 Incorrect라고 답합니다.
답은 잘 나오는 것 같은데 띄어쓰기 문제를 해결할 방법이 궁금합니다.
DataGrip에서 아래와 같이 엔드포인트/유저/패스워드를 입력하고 연결을 시도했는데 "nodename nor servname provided, or not known."라는 에러가 떠서 어떻게 해결해야 할지 궁금합니다.
Solution provided by @ cyber
Notion에 있는 URL을 그대로 드래그하면 안 됩니다. Notion 상에 있는 URL 위에 마우스를 올리고 copy를 눌러야합니다.
위 @방승현 님과 동일한 문제인 것 같은데, 해결책을 찾지 못했습니다.
먼저, 작성한 쿼리는 다음과 같습니다
SELECT
e.sin,
b.branchName,
e.salary,
(e2.salary - e.salary) AS `Salary Diff`
FROM
bank.Employee e
JOIN
bank.Branch b ON e.branchNumber = b.branchNumber
JOIN
bank.Employee e2 ON e2.sin = b.managerSIN
WHERE
b.branchName IN ('London', 'Berlin')
ORDER BY
`Salary Diff` DESC
LIMIT 10;
SQL
복사
추가로 세부내용을 첨부하겠습니다.
workbench에서 정답을 출력하는 쿼리를 prisma.$queryRaw로 출력하였더니 아래와같이 Salary diff에 n이 추가되어 출력되고 있습니다.
[
{
sin: 49024,
branchName: 'Berlin',
salary: 3349,
'Salary Diff': 86862n
},...
]
JavaScript
복사
해결방법을 찾아 첨부합니다.
정답 채점에서 Salary diff 가 문자열로 되어있어 쿼리에 타입 캐스팅을 추가해야 하는것 같아요
SELECT
e.sin,
b.branchName,
e.salary,
CAST((e2.salary - e.salary) AS CHAR(10)) AS `Salary Diff`
FROM
Employee e
JOIN
Branch b ON e.branchNumber = b.branchNumber
JOIN
Employee e2 ON e2.sin = b.managerSIN
WHERE
b.branchName IN ('London', 'Berlin')
ORDER BY
e2.salary - e.salary DESC
LIMIT 10;
SQL
복사
Problem 2 에서 salary diff 구할 때처럼 field 의 값들끼리 사칙연산을 해야 할 때 prisma 에서 어떻게 구현해야 하는지 모르겠어요,, Prisma ORM 공식 문서에서 https://www.prisma.io/docs/orm/prisma-client/queries/computed-fields 를 보고 코드를 쓰고 있는데, computed-fields 를 쓰는 게 맞나요?
Prisma에서 Type casting을 하는 방법을 검색해보니 $queryRaw를 쓰는 방법 밖에는 없다고 나옵니다.
그러면 Type casting에 한해서만 $queryRaw를 써도 되는 건가요?
(해결했습니다.)
→ Prisma 에서 데이터를 추출하고, 밑에 JS 문법으로 따로 type casting을 하여 가공하면 됩니다.
안녕하세요 질문하는 사람은 oreo 입니다!
SELECT
E.sin,
B.branchName,
E.salary,
CAST((SELECT salary FROM Employee WHERE E.sin = B.managerSIN) - E.salary AS CHAR(10)) AS "Salary Diff"
FROM Employee E
JOIN Branch B on E.branchNumber = B.branchNumber
WHERE B.branchName = "London" or B.branchName = "Berlin"
ORDER BY "Salary Diff" desc
LIMIT 10;`
TypeScript
복사
이 CAST 부분에서 자꾸 오류가 납니다..
참고로 CAST문을 따로 쓰지 않으면 위 질문처럼 n이 붙어서 출력되는?? 상황이 발생되어서 CAST를 붙여야할 것 같습니다.
하고 싶은 것은 Employ에서 managerSIN과 sin 값이 동일한 사람의 salary를 가져온다! 인데요…
Subquery returns more than 1 row
라고 에러가 납니다.
궁금증은
1.
이 에러가 CAST 내부의 select 문에서 sin과 managerSin이 같은 모든 사람의 정보를 한번에 불러와서 생기는 오류라고 추정하는데, 이것이 맞나요?
2.
어떻게 수정하는 것이 좋은지
이건 추가적인 질문인데 해결책을 모색하다가 위에 먼저 질문 올려주신 분의 쿼리를 보았습니다.
++ 위에 Join 문을 2개 사용하여 가져오는 해결책이 있는데, 이 경우 JOIN이 어떻게 작동하는 지 모르겠어요
JOIN Branch b ON e.branchNumber = b.branchNumber
JavaScript
복사
이거는 branchNumber가 같은 것에 대해서 나머지 항들을 가져오는 것, 원래 table에 추가 정보를 이어붙이는? 느낌이라고 생각이 되는데 (저도 같은 부분을 썼구요)
JOIN Employee e2 ON e2.sin = b.managerSIN
JavaScript
복사
이거는 Employee에서 Employee를 다시 교집합하나요..?
salary라는 column이 원본에도 있어서 select *를 해보아도 e2의 salary밖에 출현하지 않는데, 어떻게 각 manager의 salary로 JOIN이 어떻게 되는지를 잘 모르겠습니다… 
employee/leave 를 하면서 질문이 있습니다.
제가 과제를 하면서 prisma/
Q. “Task2. node.js에서 데이터베이스 조작하기” 태스크에서 app.get을 사용하지 않으면 post가 잘 이루어지는지 어떻게 확인할 수 있나요?