IMDB数据库中的Shahrukh数查询

2024-09-26 18:06:53 发布

您现在位置:Python中文网/ 问答频道 /正文

数据库的架构:

schema

参与者的Shahrukh数是参与者与Shahrukh Khan之间的最短路径的长度(在“共同作用”图中)。也就是说,Shahrukh Khan拥有Shahrukh编号0;所有在同一部电影中扮演沙鲁克的演员都拥有沙鲁克1号;与Shahrukh编号为1的演员在同一部电影中演出的所有演员都有Shahrukh编号2,以此类推。返回Shahrukh编号为2的所有演员

我已经写了一个SQL查询,但仍然无法得到正确的答案,因为sharukh khan 2演员的总数应该是25698,但我得到了28080。我犯了什么错误?数据库位于google drive

以下是查询:

%%time
def grader_9(q9):
    q9_results  = pd.read_sql_query(q9,conn)
    print(q9_results.head(10))
    print(q9_results.shape)
    assert (q9_results.shape == (25698, 1))

query9 = """WITH 
    SHAHRUKH_0 AS
    (
        SELECT
            P.PID PID
        FROM
            Person P
        WHERE
            Trim(P.Name) like '%Shah Rukh%'
    ),
    SHAHRUKH_1_MOVIES AS
    (
        SELECT
            DISTINCT
            MC.MID MID,
            S0.PID
        FROM
            M_Cast MC,
            SHAHRUKH_0 S0
        WHERE
            TRIM(MC.PID,' ') = TRIM(S0.PID,' ')
    ),
    SHAHRUKH_1_ACTORS AS
    (
        SELECT
            DISTINCT
            MC.PID PID
        FROM
            M_Cast MC,
            SHAHRUKH_1_MOVIES S1M
        WHERE
            MC.MID = S1M.MID AND
            TRIM(MC.PID,' ') <> TRIM(S1M.PID,' ')
    ),
    SHAHRUKH_2_MOVIES AS
    (
        SELECT
            DISTINCT
            MC.MID MID,
            S1A.PID PID
        FROM
            M_Cast MC,
            SHAHRUKH_1_ACTORS S1A
        WHERE
            TRIM(MC.PID,' ') = TRIM(S1A.PID,' ')
    ),
    SHAHRUKH_2_ACTORS AS
    (
      SELECT
              DISTINCT
              MC.PID PID
          FROM
              M_Cast MC,
              SHAHRUKH_2_MOVIES S2M,
              SHAHRUKH_1_MOVIES S1M,
              SHAHRUKH_1_ACTORS S1A,
              SHAHRUKH_0 S0

          WHERE
              MC.MID = S2M.MID AND
              TRIM(MC.PID,' ') <> TRIM(S2M.PID,' ') AND
              TRIM(MC.PID,' ') <> TRIM(S1M.PID,' ') AND
              TRIM(MC.PID,' ') <> TRIM(S1A.PID,' ') AND
              TRIM(MC.PID,' ') <> TRIM(S0.PID,' ')

      )SELECT
            P.Name 
        FROM 
            Person P,
            SHAHRUKH_2_ACTORS S2A
        WHERE 
            TRIM(S2A.PID,' ')=TRIM(P.PID,' ')"""
grader_9(query9)

Tags: fromasactorsmoviesmcwherepidselect

热门问题