ORA-907: отсутствует правая скобка, и я делаю это правильно?

#sql

#sql

Вопрос:

Я вроде как новичок в SQL.

 SELECT EMP_NAME, MAX(count(CONTRACT_CLIENT)

FROM CONTRACT JOIN EMPLOYER ON (CONTRACT_ID = EMP_ID)

WHERE EMP_ID = CONTRACT_ID;
  

в результате появляется отсутствующая правая скобка. Чувствую себя полностью потерянным.

Ответ №1:

Кажется, вы хотите найти сотрудника с максимальным количеством контрактов. Вот один из подходов:

 SELECT EMP_NAME, CC_CNT
FROM
(
    SELECT EMP_NAME, COUNT(CONTRACT_CLIENT) AS CC_CNT
    FROM CONTRACT
    INNER JOIN EMPLOYER ON CONTRACT_ID = EMP_ID
    GROUP BY EMP_NAME
    ORDER BY COUNT(CONTRACT_CLIENT) DESC
) t
WHERE rownum = 1;
  

Ключевые шаги, которые вы пропустили, включают агрегирование по использованию employee GROUP BY . И кроме того, вы не можете вложить вызов в COUNT inside MAX . Вместо этого используйте rownum трюк, чтобы найти сотрудника с наибольшим количеством.

Комментарии:

1. emp относится к работодателю, который является клиентом, консультант — сотрудник. Я ищу, у какого работодателя больше всего контрактов с нами

2. Упс… тогда, я думаю, EMP_NAME должно означать «Имя работодателя». Неважно, я все еще думаю, что логика, которую я дал вам выше, — это то, что вы хотите здесь.

Ответ №2:

Я сомневаюсь, что ваш SQL-запрос вернет правильный вывод, но я исправляю проблему с круглыми скобками для вас.

 SELECT EMP_NAME, MAX(COUNT(CONTRACT_CLIENT))
FROM CONTRACT 
JOIN EMPLOYER ON (CONTRACT_ID = EMP_ID)
WHERE EMP_ID = CONTRACT_ID;
  

Комментарии:

1. Если вы только исправляете опечатку, то, пожалуйста, не отвечайте, вместо этого проголосуйте за закрытие вопроса как вопроса с опечаткой (но есть много других проблем помимо этого).