SQL заявление, как сохранить нулевое значение - PullRequest
0 голосов
/ 12 марта 2012

Этот запрос здесь выполняется для 3 таблиц (учеников), одна из которых на экзамене равна нулю, поэтому его q.correctanswer! = Ur.response, как я могу сохранить значение 0 в своем выводе? Когда я выполняю это утверждение, оно дает мне только два значения вместо 3 для каждого студента.

select count(*) as Test1
from users u, question q, userresponse ur
where q.eno = '1' 
  and q.eno = ur.eno 
  and q.qno = ur.qno 
  and ur.response = q.correctanswer 
  and u.uno = ur.uno
group by u.uno

образец данных:

Примечание: - "||" используется для объединения строк - каждая строка находится между парой одинарных кавычек. - каждая запись находится между "(" и ")". - поля упорядочены в соответствии с полями в таблицах - "\ n" означает новую строку

====== данные экзаменов ==========

(1, «Программирование на Java», 60,1)

(3, «Элементарная история», 10,3)

====== Вопросы к данным ===========

(1,1, 'Выберите операции, которые можно выполнить со строкой объекты: (A) + \ n (B) + = \ n (C) - \ n (D)% \ n (E) ^ ',' B ')

(1,2, 'Что будет результатом выражения \ na% b \ nwhen a и b имеют тип int и имеют значения a = -17 и b = -6? ',' A ')

(1,3, 'Что будет результатом выражения \ na% b \ nwhen a и b имеют тип int и их значения a = 10 и b = 6? ',' B ')

(1,4, 'Рассмотрим следующий код: \ nint x, y, z \ ny = 1 \ nz = 5 \ nx = 0 - (++ y) + z ++ \ nПосле выполнения этого значения будут равны x, y и z? ',' C ')

(1,5, 'Определите правильные утверждения: \ n (A) int a = 13, a >> 2 = 3 \ n (B) int b = -8, b >> 1 = -4 \ n (C) int a = 13, a >>> 2 = 3 \ n (D) int b = -8, b >>> 1 = -4 ',' E ')

(1,6, 'Если не присвоено значение, переменная типа char имеет следующее значение по умолчанию: ',' A ')

(1,7, 'Каким будет значение a после выполнения следующего утверждения: \ nint a = 23, b = 34 \ na = ((a (1,8, 'Что из перечисленного не является шестнадцатеричным числом? \ N (A) 999 \ n (B) (hex) 23 \ n (C) 0x556 \ n (D) 0x1F2 ',' C ')

(1,9, 'if (check4Biz (storeNum)! = Null) {} \ nОтносительно вышеизложенного, какой тип данных может быть возвращен методом check4Biz ()? ',' D ')

(1,10, 'Выберите недействительные операторы присваивания из следующее: \ n (A) с плавающей запятой x = 238,88 \ n (B) double y = 0x443 \ n (C) int n = (int) true \ n (D) long m = 778645 ',' A ')

(1,11, 'int j \ nfor (int i = 0i <14i ++) {\ nif (i <10) {\ nj = 2 + i \ n} \ nSystem.out.println ("j:" + j + "i:" + i) \ n} \ nЧто НЕПРАВИЛЬНО с кодом выше? ',' E ') </p>

(1,12, 'Рассмотрим следующий код: \ nclass ClassA \ n {\ npublic static void main (String args []) \ n {\ nClassB b = classB () \ n} \ nClassA (int x) { } \ n} \ nclass ClassB расширяет ClassA \ n {\ n} \ nЧто произойдет, когда мы скомпилировать и запустить этот код? ',' A ')

(1,13, 'Ключевые слова зарезервированы, но не используются в начальной версии Java являются: \ n (A) объединение \ n (B) const \ n (C) внутренний \ n (D) Перейти к \ n (E) логическое \ n (F) синхронизированы», 'С')

(1,14, «Мы хотели бы сделать члена класса видимым во всех подклассы независимо от того, в каком пакете они находятся. Какой из следующие ключевые слова могли бы достичь этого? ',' D ')

(1,15, «Какие из следующих слов не являются ключевыми словами? \ N (A) NULL \ n (B)» реализует \ n (C) защищенную \ n (D) расширенную \ n (E) строку ',' B ')

(3,1, «За какую войну велась битва при Геттисберге?», «C»)

(3,2, «Сколько Нил Армстронг и Базз Олдрин прошли \ n '|| «минуты на луне в 1696 году?», «Б»)

(3,3, «Какие президенты занимали свои посты во время Второй мировой войны?», «D»)

(3,4, 'В коммунистической экономической системе люди:', 'B')

(3,5, «Какой президент не умер при исполнении служебных обязанностей?», «D»)

(3,6, «Какой штат отказался принять участие в Конституционном съезде» \ n '|| в 1787 году, потому что оно не хотело правительства Соединенных Штатов \ n '|| «вмешиваться в уже установленные государственные дела?», «А»)

(3,7, «Кто основал буддизм?», «А»)

(3,8, «Где Индия?», «D»)

(3,9, «Какая религия доминирует в Индии?», «B»)

(3,10, «Рядом с какой рекой археологи нашли индийские \ n» || 'первая цивилизация?', 'B')

========== answerOption data ============

(3,8, «А», «Австралия») (3,8, «В», «Америка») (3,8, «С», «Африка») (3,8, «D», «Азия») (3,1, «A», «Вторая мировая война») (3,1, «B», «The Революционная война ») (3,1,« C »,« Гражданская война ») (3,1,« D »,« Первая мировая война ») (3,2, «A», «123») (3,2, «B», «None») (3,2, «C», «10») (3,2, «D», «51 «) (3,3, «А», «Франклин Д. Рузвельт») (3,3, «Б», «Дуайт Д. Эйзенхауэр») (3,3, «C», «Гарри Трумэн») (3,3, «D», «A и C») (3,4, «A», «Are вынуждены работать как рабы »(3,4,« Б »,« Работа на общее благо ») (3,4, «C», «Работа на домашних компьютерах») (3,4, «D», «Не работай»)
(3,5, «А», «Джон Ф. Кеннеди») (3,5, «Б», «Франклин Д. Рузвельт») (3,5, «С», «Авраам Линкольн») (3,5, «Д», «Рональд Рейган») (3,5, «E», «Джеймс А. Гарфилд») (3,7, «A», «Сиддхарта Гаутама») (3,7, «B», «Иисус Христос») (3,7, «C», «Махатма Ганди») (3,7, «D», «Мухаммед») (3,6, «A», «Род-Айленд») (3,6, «B», «Новый Хэмпшир ") (3,6," C "," Нью-Джерси ") (3,6," D "," Нью-Йорк ") (3,9, «А», «Ислам») (3,9, «В», «Индуизм») (3,9, «С», «Христианство») (3,9, «D», «Буддизм») (3,10, «A», «Река Тибр») (3,10, «B», «The Река Инда ') (3,10,' C ',' Желтая река ') (3,10,' D ',' Нил Река ') (1,1,' A ',' (D) & (E) ') (1,1, "B", "(A) & (B)') (1,1," C ", '(D)') (1,1, «D», «(A)») (1,1, «E», «Ни один из них») (1,2, «A», «- 17») (1,2, «B», «5») (1,2, «C», «3») (1,2, «D», «- 5») (1,2, «E», « Ни один из этих ') (1,3, «A», «1,66») (1,3, «B», «4») (1,3, «C», «2») (1,3, «D», «1 «) (1,3, «E», «Ни один из них») (1,4, «A», «x = 4, y = 1, z = 5») (1,4, «B», «x = -7, y = 1, z = 5 ') (1,4, «C», «x = 3, y = 2, z = 6») (1,4, «D», «x = 4, y = 2, z = 6 ') (1,4, «E», «x = 8, y = 2, z = 1») (1,5, «A», «(C) & (D)» ) (1,5, «B», «(A), (B) и (C)») (1,5, «C», «(A), (B), (C) и (D)») (1,5, «D», «(A) и (B)») (1,5, «E», «Ничего из вышеперечисленного») (1,6, 'A', '\ uffff') (1,6, 'B', '\ u0000') (1,6, 'C', '"" (пробел)') (1,6, «D», «\ u0001») (1,6, «E», «Ничего из вышеперечисленного») (1,7, «A», «23») (1,7, «B», «Ошибка. Невозможно выполнить.») (1,7, «C», «57») (1,7, «D», «11») (1,7, «E», «34») (1,8, «A», «(A), (B) и (C)») (1,8, «B», «(C)» ) (1,8, «C», «(A) и (B)») (1,8, «D», «(A)») (1,8, «E», «(D)») (1,9, «A», «Boolean») (1,9, «B», «Int») (1,9, «C», «String») (1,9, «D», «Char») (1,9, «E», «Byte») (1,10, «A», «(A) и (C)») (1,10, «B», «(A) & (B)») (1,10, «C», «(B)») (1,10, «D», «(B) & (D) ) ') (1,10, 'E', '(D)') (1,11, "A", "Целое число" j "не инициализировано.") (1,11, 'B', 'Nothing.') (1,11, 'C', 'Вы не можете объявить целое число i внутри объявление цикла for. ') (1,11,' D ',' Синтаксис "если" оператор неверен. ') (1,11,' E ',' Вы не можете печатать целочисленные значения без преобразования их в строки. ') (1,12,' A ',' Скомпилирует и запустит успешно ') (1,12,' B ',' Ошибка. ClassA не определяет отсутствие аргумента constructor ') (1,12,' C ',' Ошибка. В конструкторе нет кода ClassA (int x) ') (1,12,' D ',' Ошибка. ClassB не определяет конструктор без аргументов ') (1,12,' E ',' Ошибка. В класс ClassB ') (1,13,' A ',' (C) & (E) ') (1,13,' B ',' (B), (C) & (D) ') (1,13, «C», «(A), (C) и (E)») (1,13, «D», «Все это») (1,13, «E», «Ни один из них».) (1,14, «A», «private») (1,14, «B», «public») (1,14, «C», «защищенный») (1,14, «D», «частный ИЛИ защищенный») (1,14, «E», «Все вышеперечисленное») (1,15, «A», (C), (D) и (E) ') (1,15, «B», «(D)») (1,15, «C», (A), (D) и (E) ') (1,15, «D», «(D ) & (E) ') (1,15, 'E', '(A)')

===== данные пользователей ====

(1, '1 @ gmail.com', '', 'Джордж', 'Рональда', '', '', 'Атланта', 'GA', '30303') (2, '2 @ gmail.com', '', 'Mary', 'Erikson', '', '', 'San Diego', 'CA', '91901') (3, '3 @ gmail.com', '', 'Джон', 'Вашингтон', '', '', 'Атланта', 'GA', '30314')

==== регистрирует данные =====

(1,1, to_date ('2012/02/15 10:00:00', 'гггг / мм / дд hh24: mi: ss '), to_date (' 2012/02/22 10:00:00 ',' гггг / мм / дд hh24: mi: ss ') (2,1, to_date ('2012/02/15 10:00:00', 'гггг / мм / ддhh24: mi: ss '), to_date (' 2012/02/22 10:00:00 ',' гггг / мм / дд hh24: mi: ss ') (3,1, to_date (' 2012/02/17 10: 00: 00 ',' гггг / мм / дд чч24: ми: сс '), дата_даты (' 2012/02/24 10:00:00 ',' гггг / мм / дд чч24: ми: сс ') (1, 3, to_date ('2012/02/17 10:00:00', 'гггг / мм / дд чч24: ми: сс'), to_date ('2012/02/24 10:00:00', 'гггг /mm / dd hh24: mi: ss ') (2,3, to_date (' 2012/02/20 10:00:00 ',' гггг / mm / dh hh24: mi: ss '), to_date (' 2012/02/ 27 10:00:00 ',' гггг / мм / дд чч24: ми: сс ') (3,3, до_даты (' 2012/02/20 10:00:00 ',' гггг / мм / дд чч24:mi: ss '), to_date (' 2012/02/27 10:00:00 ',' гггг / мм / дд чч24: ми: сс ')

=== userResponse data ====

(1,1,1, «A») (1,1,2, «B») (1,1,3, «A») (1,1,4, «B») (1,1,5, «N») (1,1,6, «C») (1,1,7, «D») (1,1,8, «A») (1,1,9,«B») (1,1,10, «B») (1,1,11, «A») (1,1,12, «B») (1,1,13, «A») (1, 1,14, «А») (1,1,15, «А»)

(2,1,1, «В») (2,1,2, «В») (2, 1,3, «E») (2,1,4, «C») (2,1,5, «D») (2,1,6, «A») (2,1,7, 'C ') (2,1,8, «B») (2,1,9, «B») (2,1,10, «A») (2,1,11, «A») (2,1,12, «B») (2,1,13, «B») (2,1,14, «A») (2,1,15, «A»)

(3,1,1, 'C') (3,1,2, «C») (3,1,3, «D») (3,1,4, «D») (3,1,5, «A») (3,1,6, «A») (3,1,7, «D») (3,1,8, «D») (3,1,9, «A») (3,1,10, «A») (3,1,11,«B») (3,1,12, «B») (3,1,13, «A») (3,1,14, «A») (3,1,15, «C»)

(1,3,1, «N») (1,3,2, «A») (1,3,3, «A») (1,3,4, «B») (1, 3,5, «B») (1,3,6, «C») (1,3,7, «D») (1,3,8, «A») (1,3,9, 'A ') (1,3,10, «B»)

(2,3,1, «B») (2,3,2, «C») (2,3,3,'A ') (2,3,4, «C») (2,3,5, «B») (2,3,6, «D») (2,3,7, «D») (2,3,8, «D») (2,3,9, «A») (2,3,10, «A»)

(3,3,1, «B») (3,3,2, «A») (3,3,3, «A») (3,3,4, «B») (3,3,5, «B») (3,3,6, «C»') (3,3,7, «D») (3,3,8, «A») (3,3,9, «A») (3,3,10, «B»)

Спасибо,

Ответы [ 3 ]

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

Я думаю, что вы спрашиваете: «Сколько вопросов задал любой пользователь?» Если так, основываясь на вашем запросе - и на том факте, что между пользователями и вопросами нет прямой связи - я придумал следующее:

select u.uno, sum(case ur.response when null then 0 else 1 end) as Test1
  from question q
       cross join users u
       left join userresponse ur
         on q.eno = ur.eno
        and q.qno = ur.qno  
        and q.correctanswer = ur.response 
        and u.uno = ur.uno
 where q.eno = '1' 
group by u.uno

Итак, мы делаем картезное соединение между users и questions, потому что у нас нет лучшего способа присоединиться к ним. Затем мы выполняем левое внешнее соединение с таблицей userresponse; если все не совпадает правильно, пользователь либо не ответил на вопрос, либо ответил на него неправильно. Мы приводим, равно ли это значение нулю 0, если оно равно нулю, и 1, если это не так, поэтому их сумма равна числу правильных ответов на пользователя.

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

Если я правильно понял ваш запрос, должно сработать следующее. Он использует старый синтаксис соединения Oracle:

SELECT u.uno, COUNT(*)
  FROM users u, userresponse ur, question q
 WHERE u.uno = ur.uno
   AND ur.response = q.correctanswer(+)
   AND ur.eno = q.eno(+)
   AND ur.qno = q.qno(+)
   AND q.eno(+) = 1
 GROUP BY u.uno
0 голосов
/ 12 марта 2012

Я думаю, что вы пытаетесь получить все пользователи и соответствующие оценки викторины.Если я правильно понял, то, используя соответствующие предложения объединений, вы можете легко получить ожидаемые результаты:

select u.uno, count (ur.response) as NumberAnswered, count (q.correctanswer) as NumberCorrect
from users u
join userresponse ur --inner join means we limit user rows to users who have responses
on u.uno = ur.uno
left outer join question q --outer join means we look for row data, but don't exclude users based on the fact that the row doesn't match the join conditions
on ur.response = q.correctanswer
and q.eno = 1 --only include rows where the question.eno value is 1(?)
and q.eno = ur.eno --only include rows where question.eno and userresponse.eno are the same (the answer was correct)
group by u.uno
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...