Re: Why oh why is this join not working?

Поиск
Список
Период
Сортировка
От Pól Ua Laoínecháin
Тема Re: Why oh why is this join not working?
Дата
Msg-id CAF4RT5S-yAv7=bCpJXSsnquKkO8sNWpEebn-OzH0oa7dRGGmig@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Why oh why is this join not working?  (Bryan Nuse <bryan.nuse@gmail.com>)
Ответы RE: Why oh why is this join not working?
Список pgsql-novice
Hi Bryan, and thanks for your interest in my problem.

> I think you just need parentheses around the first subquery, and to put
> both subqueries in the FROM list of an outer SELECT.

Yes, I could do that! However, if you check out my reply to David
Rowley in the same thread, you'll see that I've got much further.

Fiddle here:
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=5aaa2fde61da3b70521f5e1bc29a047e

With the query:

SELECT t1.class, t1.roll_number,
  SUM(CASE WHEN t1.subjects = 'math'
    THEN t1.marks ELSE 0 END) AS mathmark,
  SUM(CASE WHEN t1.subjects = 'computer'
    THEN t1.marks ELSE 0 END) AS compmark,
  SUM(CASE WHEN t1.subjects = 'english'
    THEN t1.marks ELSE 0 END)  AS englmark,
  SUM(CASE WHEN t1.subjects = 'science'
    THEN t1.marks ELSE 0 END)  AS sciemark
FROM resultdata AS t1
JOIN
(
  SELECT class, MAX(marks) AS maxmark
  FROM resultdata
  WHERE subjects = 'english'
  GROUP BY class
) AS t2
ON t1.class = t2.class
AND t1.englmark = t2.maxmark        -- Error occurs here.
GROUP BY t1.class, t1.roll_number
ORDER BY class, englmark DESC;

The error occurs way down the query at line 19. Error message:

ERROR: column t1.englmark does not exist LINE 19: AND t1.englmark = t2.maxmark

Now, I can refer to t1.class in the ON clause, but *_not_* to
t1.englmark. To me this makes no sense - if I can refer to one, I
should be able to refer to the other?

I could have taken the nested subquery strategy but a) I think the
query would be more elegant without it and b) (something I'll check up
on), I'm wondering if more levels of subqueries might have performance
implications? Finally, c) As mentioned above, if I can refer to
t1.class, I should be able to refer to t1.englmark!

Thanks again for your input, rgs,

Pól...


> Bryan



В списке pgsql-novice по дате отправления:

Предыдущее
От: Pól Ua Laoínecháin
Дата:
Сообщение: Re: Why oh why is this join not working?
Следующее
От: Laurenz Albe
Дата:
Сообщение: Re: Why oh why is this join not working?