SQL сравнивая две таблицы - PullRequest
0 голосов
/ 12 марта 2012

У меня есть таблица, которая дает мне оценку за экзамен с использованием функции подсчета.Мне нужно выполнить те же функции, чтобы сравнить, например, test1 с test2.

, чтобы найти первую оценку за экзамен, в которой я использую функцию счета, и выполнить добавление некоторых ограничений в предложении where, а затем группировать по имени пользователя,

Мне нужно сравнить этот счетчик со вторым счетчиком, который должен быть во втором операторе выбора, однако я не могу добавить оператор выбора в предложении Имеющий, и я не могу выполнить никаких операций над счетчиком в предложении где,Ниже приведена основная идея того, что у меня сейчас есть

SELECT ur.uno, COUNT(*)*5 as test1
 FROM question q, 
      userresponse ur
WHERE q.eno = '1' 
  AND q.eno = ur.eno 
  AND q.qno = ur.qno 
  AND q.correctanswer = ur.response 
  AND test1 > (SELECT ur.uno, COUNT(*)*5
                 FROM question q1, 
                      userresponse ur1
                WHERE q1.eno = '3' 
                  AND q1.eno = ur1.eno 
                  AND q1.qno = ur1.qno 
                  AND q1.correctanswer = ur1.response
             GROUP BY ur.no)
GROUP BY ur.uno

Это мой первый подход, однако я получаю недопустимый идентификатор test1.Мой другой подход будет

select ur.uno, count(*)*5 as test1
from question q, userresponse ur
where q.eno = '1' and q.eno = ur.eno and q.qno = ur.qno and q.correctanswer = ur.response
group by ur.uno
having count(*)*5 > (select ur1.uno, count(*)*5 as test3
from question q1, userresponse ur1
where q1.eno = '3' and q1.eno = ur1.eno and q1.qno = ur.qno and q.correctanswer = ur.response
group by ur1.uno)

, но я получаю слишком много ошибок значений, какие-либо идеи?

Ответы [ 3 ]

1 голос
/ 12 марта 2012

@ user541597; Эй, удалите "ur.uno" из внутреннего запроса, я думаю, он будет работать ..

1 голос
/ 12 марта 2012

Попробуйте:

SELECT ur.uno, 
       COUNT(case when q.eno='1' then 1 end)*5 as test1, 
       COUNT(case when q.eno='3' then 1 end)*5 as test3
 FROM question q, 
      userresponse ur
WHERE q.eno in ('1', '3')
  AND q.eno = ur.eno 
  AND q.qno = ur.qno 
  AND q.correctanswer = ur.response 
HAVING COUNT(case when q.eno='1' then 1 end) >
       COUNT(case when q.eno='3' then 1 end)
0 голосов
/ 12 марта 2012

в первом запросе

, где предложение не распознает псевдоним, поэтому вы можете заменить test1.

во втором запросе

вы можете изменить

select ur1.uno, count(*)*5 as test3

до

select count(*)*5 as test3

во втором операторе select, чтобы избежать ошибки слишком большого числа значений.

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