SQL ORACLE ORA-00923: ключевое слово FROM не найдено там, где ожидается - PullRequest
0 голосов
/ 13 мая 2019

Я знаю, что означает эта ошибка, но я не понимаю, почему я ее получаю.Я думаю, что правильно сделал вопрос.Пожалуйста помоги.Вопрос, ERD и код ниже.Я использую Oracle SQL Developer.Заранее спасибо!

Для каждой фондовой биржи отобразите символ акции с наибольшим общим объемом торговли.Показать название биржи, символ акций и общий объем торгов.Сортируйте выходные данные по названию фондовой биржи и символу акции.

SELECT 
  se.name,
  se.stock_ex_id,
  sl.stock_symbol,
  SUM(t.shares) AS total_trade_volume
FROM stock_exchange se
  JOIN trade t
    ON se.stock_ex_id = t.stock_ex_id
  JOIN stock_listing sl
    ON sl.stock_id = t.stock_id
   AND sl.stock_ex_id = t.stock_ex_id
HAVING SUM(t.shares) IN (SELECT MAX(total_shares)
                         FROM (SELECT stock_ex_id,
                                      stock_id,
                                      SUM(shares)
                               FROM trade
                         WHERE stock_ex_id IS NOT NULL
                         GROUP BY stock_ex_id, stock_id)
                         GROUP BY se.stock_ex_id, se.name, sl.stock_symbol
                         ORDER BY se.name, sl.stock_symbol

ERD:

enter image description here

1 Ответ

2 голосов
/ 13 мая 2019

Несколько синтаксических ошибок, в том числе:
HAVING пункт перед GROUP BY
отсутствует псевдоним столбца
Я пытался исправить эти и другие:

SELECT 
  se.name,
  se.stock_ex_id,
  sl.stock_symbol,
  SUM(t.shares) AS total_trade_volume
FROM stock_exchange se 
JOIN trade t ON se.stock_ex_id = t.stock_ex_id
JOIN stock_listing sl ON sl.stock_id = t.stock_id AND sl.stock_ex_id = t.stock_ex_id
GROUP BY se.stock_ex_id, se.name, sl.stock_symbol
HAVING SUM(t.shares) IN (
  SELECT MAX(total_shares)
  FROM (
    SELECT stock_ex_id, stock_id, SUM(shares) AS total_shares
    FROM trade
    WHERE stock_ex_id IS NOT NULL
    GROUP BY stock_ex_id, stock_id
  )
)
ORDER BY se.name, sl.stock_symbol

Кроме того, хотя синтаксически это не так, предложение IN бесполезно, и вместо него вы можете использовать =.

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