이 쿼리를 어떻게 최적화 할 수 있습니까?

안나 레드 니코 바

이 쿼리를 postgresql 9.3에서 작성해야합니다.

  1. 각 국가에서 가장 인기있는 영화를 나열합니다. 가장 인기있는 영화 / 영화는 해당 국가의 모든 사용자에서 가장 높은 평균 등급을받은 영화입니다. 동점 인 경우 모든 영화 순서를 알파벳순으로 반환합니다. (2 열)

필요한 테이블 :

CREATE TABLE movie (
id integer,
name varchar(200),
year date
);

CREATE TABLE userProfile (
userid varchar(200),
gender char(1),
age integer,
country varchar(200),
registered date
);

CREATE TABLE ratings (
mid integer,
userid varchar(200),
rating integer
);

CREATE INDEX movie_id_idx ON movie (id);
CREATE INDEX userProfile_userid_idx ON userProfile (userid);
CREATE INDEX ratings_userid_idx ON ratings (userid);
CREATE INDEX ratings_mid_idx ON ratings (mid);
CREATE INDEX ratings_userid_mid_idx ON ratings (userid, mid);

내 쿼리는 다음과 같습니다.

CREATE TEMP TABLE tops AS SELECT country, name 
FROM ratings AS r INNER JOIN userProfile AS u
ON r.userid=u.userid 
INNER JOIN movie AS m ON m.id = r.mid LIMIT 0;

~10 min
CREATE TEMP TABLE avg_country AS
SELECT country, r.mid, AVG(rating) AS rate
FROM ratings AS r INNER JOIN userProfile AS u
ON r.userid=u.userid 
GROUP BY country, r.mid;

~8 min
DO $$
DECLARE arrow record;
BEGIN
CREATE TABLE movie_names AS SELECT id, name FROM movie;
FOR arrow IN SELECT DISTINCT country FROM userProfile ORDER BY country
LOOP
  CREATE TABLE movies AS SELECT mid FROM (SELECT MAX(rate) AS m_rate FROM avg_country
  WHERE country=arrow.country) AS max_val CROSS JOIN LATERAL
  (SELECT mid FROM avg_country 
  WHERE country=arrow.country AND rate=max_val.m_rate) AS a;
  WITH names AS (DELETE FROM movie_names AS m 
  WHERE m.id IN (SELECT mid FROM movies) RETURNING name)
  INSERT INTO tops
  SELECT arrow.country, name FROM names ORDER BY name;
  DROP TABLE movies;
END LOOP;
DROP TABLE movie_names;
END$$;

SELECT * FROM tops;
DROP TABLE tops, avg_country;

많은 감사드립니다)

고든 리노 프

이것은 kordirkos 대답 과 비슷 하지만 하위 쿼리가 하나 더 적습니다.

select country, movie_name, avg_rating
from (select u.country, m.name as movie_name, avg(r.rating) as avg_rating
             rank() over (partition by u.country order by avg(r.rating) desc) as seqnum
      from userProfile u join
           ratings r
           on u.userid = r.userid join
           movie m
           on r.mid = m.id
      group by u.country, m.id -- `name` is not needed here because id is unique 
     ) uc
where seqnum = 1;

또는 국가 당 한 행에 목록을 가져 오려면 다음을 수행하십시오.

select country, string_agg(movie_name, '; ') as most_popular_movies
from (select u.country, m.name as movie_name, avg(r.rating) as avg_rating
             rank() over (partition by u.country order by avg(r.rating) desc) as seqnum
      from userProfile u join
           ratings r
           on u.userid = r.userid join
           movie m
           on r.mid = m.id
      group by u.country, m.id -- `name` is not needed here because id is unique 
     ) uc
where seqnum = 1
group by country;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

이 쿼리를 어떻게 든 최적화 할 수 있습니까?

분류에서Dev

이 mysql 쿼리를 어떻게 최적화 할 수 있습니까?

분류에서Dev

Rails로이 쿼리를 어떻게 최적화 할 수 있습니까?

분류에서Dev

이 느린 SQL 쿼리를 어떻게 최적화 할 수 있습니까?

분류에서Dev

이 코드를 어떻게 최적화 할 수 있습니까?

분류에서Dev

어떻게 더이 쿼리를 최적화 할 수 있습니다?

분류에서Dev

이 쿼리를 어떻게 최적화 할 수 있습니까? 열의 값을 검색합니다.

분류에서Dev

실행 속도 측면에서이 쿼리를 어떻게 최적화 할 수 있습니까?

분류에서Dev

더 빠른 실행 시간을 위해이 쿼리를 어떻게 최적화 할 수 있습니까?

분류에서Dev

이 게터 성능 문제를 어떻게 최적화 할 수 있습니까?

분류에서Dev

EF Code First 쿼리를 어떻게 최적화 할 수 있습니까?

분류에서Dev

DAL web2py 쿼리를 어떻게 최적화 할 수 있습니까?

분류에서Dev

이 파이썬 루프를 어떻게 최적화 할 수 있습니까?

분류에서Dev

바이너리 검색을 어떻게 최적화 할 수 있습니까?

분류에서Dev

이 알고리즘을 어떻게 최적화 할 수 있습니까?

분류에서Dev

이 Codewars C ++ 코드를 어떻게 최적화 할 수 있습니까?

분류에서Dev

VBA-Excel :이 코드를 어떻게 최적화 할 수 있습니까?

분류에서Dev

ARM NEON으로이 코드를 어떻게 최적화 할 수 있습니까?

분류에서Dev

이 자바 코드를 어떻게 최적화 할 수 있습니까?

분류에서Dev

이 Python 코드를 어떻게 최적화 할 수 있습니까?

분류에서Dev

장고 뷰에서 데이터베이스 쿼리 셋을 어떻게 최적화 할 수 있습니까?

분류에서Dev

큰 C ++ 벡터를 처리하는이 함수를 어떻게 최적화 할 수 있습니까?

분류에서Dev

이 scipy 최소 제곱 최적화 루틴에서 가중치를 어떻게 적용 할 수 있습니까?

분류에서Dev

코드를 어떻게 최적화 할 수 있습니까?

분류에서Dev

SQLite ORDER BY rowid를 어떻게 최적화 할 수 있습니까?

분류에서Dev

이 간단한 파이썬 파이 게임 코드를 어떻게 최적화 할 수 있습니까?

분류에서Dev

이 SQL 쿼리를 어떻게 정리할 수 있습니까?

분류에서Dev

이 엄청나게 느린 왼쪽 외부 조인 sqlite 쿼리를 어떻게 최적화 할 수 있습니까?

분류에서Dev

이 쿼리를 어떻게 수정할 수 있습니까?-MySQL

Related 관련 기사

  1. 1

    이 쿼리를 어떻게 든 최적화 할 수 있습니까?

  2. 2

    이 mysql 쿼리를 어떻게 최적화 할 수 있습니까?

  3. 3

    Rails로이 쿼리를 어떻게 최적화 할 수 있습니까?

  4. 4

    이 느린 SQL 쿼리를 어떻게 최적화 할 수 있습니까?

  5. 5

    이 코드를 어떻게 최적화 할 수 있습니까?

  6. 6

    어떻게 더이 쿼리를 최적화 할 수 있습니다?

  7. 7

    이 쿼리를 어떻게 최적화 할 수 있습니까? 열의 값을 검색합니다.

  8. 8

    실행 속도 측면에서이 쿼리를 어떻게 최적화 할 수 있습니까?

  9. 9

    더 빠른 실행 시간을 위해이 쿼리를 어떻게 최적화 할 수 있습니까?

  10. 10

    이 게터 성능 문제를 어떻게 최적화 할 수 있습니까?

  11. 11

    EF Code First 쿼리를 어떻게 최적화 할 수 있습니까?

  12. 12

    DAL web2py 쿼리를 어떻게 최적화 할 수 있습니까?

  13. 13

    이 파이썬 루프를 어떻게 최적화 할 수 있습니까?

  14. 14

    바이너리 검색을 어떻게 최적화 할 수 있습니까?

  15. 15

    이 알고리즘을 어떻게 최적화 할 수 있습니까?

  16. 16

    이 Codewars C ++ 코드를 어떻게 최적화 할 수 있습니까?

  17. 17

    VBA-Excel :이 코드를 어떻게 최적화 할 수 있습니까?

  18. 18

    ARM NEON으로이 코드를 어떻게 최적화 할 수 있습니까?

  19. 19

    이 자바 코드를 어떻게 최적화 할 수 있습니까?

  20. 20

    이 Python 코드를 어떻게 최적화 할 수 있습니까?

  21. 21

    장고 뷰에서 데이터베이스 쿼리 셋을 어떻게 최적화 할 수 있습니까?

  22. 22

    큰 C ++ 벡터를 처리하는이 함수를 어떻게 최적화 할 수 있습니까?

  23. 23

    이 scipy 최소 제곱 최적화 루틴에서 가중치를 어떻게 적용 할 수 있습니까?

  24. 24

    코드를 어떻게 최적화 할 수 있습니까?

  25. 25

    SQLite ORDER BY rowid를 어떻게 최적화 할 수 있습니까?

  26. 26

    이 간단한 파이썬 파이 게임 코드를 어떻게 최적화 할 수 있습니까?

  27. 27

    이 SQL 쿼리를 어떻게 정리할 수 있습니까?

  28. 28

    이 엄청나게 느린 왼쪽 외부 조인 sqlite 쿼리를 어떻게 최적화 할 수 있습니까?

  29. 29

    이 쿼리를 어떻게 수정할 수 있습니까?-MySQL

뜨겁다태그

보관