WITH views_king AS (
SELECT
RANK() OVER (ORDER BY views DESC) AS ranking
, board_id
FROM
used_goods_board
)
, rank_one_boardId AS (
SELECT
b.board_id
FROM
used_goods_board b
JOIN views_king k
USING(board_id)
WHERE
ranking = 1
)
SELECT
CONCAT('/home/grep/src/',f.board_id,'/',file_id,file_name,file_ext) AS file_path
FROM
used_goods_file f
JOIN rank_one_boardId r
USING(board_id)
ORDER BY
f.file_id DESC
;
→ 처음 풀었을 때는 ORDER BY DESC
와 LIMIT
로 풀었음!
MAX(views)
로도 됩니다!WITH product_units_price AS (
SELECT
p.product_id
, price
, units
FROM
prices p
LEFT JOIN unitssold u
ON p.product_id = u.product_id
AND purchase_date BETWEEN start_date AND end_date
)
, total_price AS(
SELECT
product_id
, IFNULL(units, 0) AS units
, IFNULL(units, 0) * price AS total
FROM
product_units_price
)
SELECT
product_id
, IFNULL(ROUND(sum(total)/sum(units), 2), 0) AS average_price
FROM
total_price
GROUP BY
product_id
;
SELECT
p.product_id
, IFNULL(ROUND(SUM(units*price)/SUM(units),2),0) AS average_price
FROM
Prices p
LEFT JOIN UnitsSold u
ON p.product_id = u.product_id
AND u.purchase_date BETWEEN start_date AND end_date
group by
product_id
→ 내가 작성한 쿼리가 사실은 이렇게 한 번에 적을 수 있는 거였는데 괜히 CTE를 썼다.
def solution(left, right):
answer = 0
for i in range(left, right+1):
div_list=[]
for j in range(1, int(i**(1/2))+1):
if (i % j == 0):
div_list.append(j)
if ((j**2) != i):
div_list.append(i//j)
if len(div_list) % 2 == 0:
answer += i
else:
answer -= i
return answer
→ N = A*B로 나타낼 수 있으니까 절반만 돌려서 A만 찾고 짝궁은 N/A로 넣는다는 전략
→ 애초에 N = A*B에서 A=B인 경우와 아닌 경우로 나눌 수 있으면 금방 풀 것 같은데 이걸 코드로 나타내는 방법을 모르겠음
def solution(left, right):
answer = 0
for i in range(left,right+1):
if int(i**(1/2))==i**(1/2):
answer -= i
else:
answer += i
return answer