0

具体的には、テーブルは次のとおりです。articles、authors、authors_articles (著者と記事を接続)、subjectareas (著者の主題領域)、authors_subjectareas (著者とその主題領域を接続)。

記事テーブルから行ごとに読み取り、各記事の著者を見つけてから、その主題分野に移動し、その記事のすべての共著者の主題分野を数え、最後に最大頻度の主題分野を割り当てますその記事。私は次のようにコードを書きますが、問題は、記事ごとではなく、すべての記事に対してそれを行っていることです!

select art.name as title, art.theAbstract as abstract, sub.name as subjectArea
from
articles as art, authors as aut, subjectareas as sub, authors_articles as aa, 
authors_subjectareas as asub 
where
art.id = aa.article and aut.id = aa.author and asub.author = aut.id and
sub.id = asub.subjectArea and (art.year >= 2000 and art.year <= 2004)
group by subjectArea
Order by count(subjectArea) DESC
LIMIT 1

コメントをいただければ幸いです...

4

1 に答える 1

0

マテリアライズされたテーブルからグループごとの最大値を取得しようとしています。

SELECT t2.name AS title, t2.theAbstract AS abstract, sub.name AS subjectArea
FROM (

  -- get each article's maximum co-author subject frequency
  SELECT art.id, MAX(freq) freq FROM (

    -- the subject frequencies of each article
    SELECT   art.id, COUNT(*) freq
    FROM     authors_articles aa
        JOIN authors_subjectareas asub USING (author)
        JOIN articles art ON art.id = aa.article
    GROUP BY art.id, asub.subjectArea

  ) t

) t1 NATURAL JOIN (

  -- the information we actually want
  SELECT   art.id, art.name, art.theAbstract, asub.subjectArea, COUNT(*) freq
  FROM     authors_articles aa
      JOIN authors_subjectareas asub USING (author)
      JOIN articles art ON art.id = aa.article
  GROUP BY art.id, asub.subjectArea

) t2 JOIN subjectareas sub ON sub.id = t2.subjectArea
于 2012-11-19T15:26:28.717 に答える