Мне нужен запрос, который получает этот результат - PullRequest
1 голос
/ 03 марта 2010

У меня есть таблица из 3 столбцов:

  • AuthorID (идентификатор может повторяться)
  • JournalName (имя может повторяться)
  • AuthorScore

Мне нужен запрос, который получает JournalName и количество всех авторов, имеющих максимальную оценку в этом журнале.

Заранее спасибо.

Ответы [ 5 ]

3 голосов
/ 03 марта 2010
select 
    maxscorejournalinstances.journalname,
    COUNT(*) as maxscorecount
from
    (
    select 
        journalname
        from
    foo inner join
        (
            select 
                authorid,
                MAX(authorscore) as maxscore
            from
                foo
            group by
                authorid
        ) maxauthorscores
    on foo.AuthorId = maxauthorscores.AuthorId 
    and foo.AuthorScore = maxauthorscores.maxscore
    ) maxscorejournalinstances
group by
    maxscorejournalinstances.JournalName

Обратите внимание, что если автор имеет одинаковый высокий балл в двух или более журналах, каждый из этих журналов будет включен в набор результатов.

0 голосов
/ 03 марта 2010

Похоже, вам нужно 2 запроса, так как возвращенные данные не могут быть возвращены в одном наборе записей, где легко увидеть макет данных.

Количество авторов на журнал,

select JournalName, count(distinct AuthorID) 
from table
group by JournalName

Максимальная оценка автора за журнал,

select JournalName, AuthorID, max(AuthorScore)
from table
group by JournalName, AuthorID
0 голосов
/ 03 марта 2010

Нечто подобное может работать.

select authorid, journalname, authorscore, max(authorscore) over(parition by authorid)
from <table>
order by journalname

Проведение некоторых исследований функции sql olap должно указать вам правильное направление, если это не сработает.

0 голосов
/ 03 марта 2010
select 
   x.journalname, count(x.authorid)
from tableX x
inner join

(
select authorid, max(authorscore) max_authorscore
from tableX
group by authorid
) tmp on x.authorid=tmp.authorid and x.authorscore=tmp.max_authorscore
group by journalname
0 голосов
/ 03 марта 2010
SELECT AuthorID, MAX(AuthorScore) as AuthorScore, 
    (
        SELECT JournalName 
        FROM tab t2 
        WHERE t1.AuthorID = t2.AuthorID AND t2.AuthorScore = MAX(t1.AuthorScore)
    ) as JournalName
FROM tab t1
GROUP BY AuthorID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...