0

次のテーブルがあります。

trendingtopic
  id
  name

trendingtopiccycle
  id
  trendingtopic_id(FK)

tweet
  id 
  text
  tt_cycle_id(FK)
  user_id(FK)

user
  id
  rank

各トレンドトピックの上位ユーザーのツイートを効率よく取得する方法があれば教えてください。

これが私の現在のクエリです:

  SELECT tt."name",
  MAX(tu."actual_rank") AS rank,tu."name"
  FROM "trendingtopics_twitteruser" tu
  LEFT JOIN "trendingtopics_tweet" tw ON tu."id" = tw."user_id" 
  LEFT JOIN "trendingtopics_trendingtopiccycle" ttc ON tw."tt_cycle_id" = ttc."id"
  LEFT JOIN "trendingtopics_trendingtopic" tt ON ttc."tt_id" = tt."id" 
  GROUP BY tt."name"

Postgresql によると、' "tu.name" は GROUP BY 句に表示されるか、集計関数で使用される必要があるため、機能していません。

tu."name" を GROUP BY 句に追加すると、次のような結果になります。

"106 & Park";0;"910Prince"
"106 & Park";0;"ActressAlexiss"
"106 & Park";0;"AmeliaThirlwall"
"106 & Park";0;"_ArielIvy"
"106 & Park";0;"_AyyeVce"
"106 & Park";0;"barcastuff"
"106 & Park";0.42141;"pareexo"
"106 & Park";0.0363;"khleosupporters"
"#15ThingsAboutMyCrush";0;"_ALoyalLady"
"#15ThingsAboutMyCrush";0.22275;"AmberrNikole"
"#15ThingsAboutMyCrush";0;"a_paigeturner"
"#15ThingsAboutMyCrush";0.33942018;"ArleneAndrea_xo"

しかし、私が取得したいのは:

"106 & Park";0.42141;"pareexo"
"#15ThingsAboutMyCrush";0.33942018;"ArleneAndrea_xo"
4

3 に答える 3

1

最速の解決策は、おそらくDISTINCT ONウィンドウ関数ではなく使用することです。

SELECT DISTINCT ON (tt."name")
    tt."name", tu."actual_rank" AS rank, tu."name"
  FROM "trendingtopics_twitteruser" tu
  LEFT JOIN "trendingtopics_tweet" tw ON tu."id" = tw."user_id" 
  LEFT JOIN "trendingtopics_trendingtopiccycle" ttc ON tw."tt_cycle_id" = ttc."id"
  LEFT JOIN "trendingtopics_trendingtopic" tt ON ttc."tt_id" = tt."id" 
  ORDER BY tt."name", tu."actual_rank" DESC;

ちなみに、説明したテーブルを実際に作成してロードするステートメントを提供していないため、これはテストされていません。質問でそのようなことを提供すると、人々は通常、投稿する前に回答をテストするため、愚かなエラーに対処する必要はありません。

于 2012-08-03T19:37:11.577 に答える
0
SELECT tt."name",
  MAX(tu."actual_rank") AS rank,MAX(tu."name") as name_1
  FROM "trendingtopics_twitteruser" tu
  LEFT JOIN "trendingtopics_tweet" tw ON tu."id" = tw."user_id" 
  LEFT JOIN "trendingtopics_trendingtopiccycle" ttc ON tw."tt_cycle_id" = ttc."id"
  LEFT JOIN "trendingtopics_trendingtopic" tt ON ttc."tt_id" = tt."id" 
  GROUP BY tt."name"
于 2012-08-03T13:34:52.080 に答える