2016-12-12 2 views
-1

При выполнении запроса:коррекции для запроса ш

SELECT DISTINCT (u.name),u.class, 
(SELECT (markscored) FROM marklist WHERE subject LIKE 'biology' AND u.id=m.id) AS biology, 
(SELECT (markscored) FROM marklist WHERE subject LIKE 'chemistry' AND u.id=m.id) AS chemistry, 
(SELECT (markscored) FROM marklist WHERE subject LIKE ' physics' AND u.id=m.id) AS physics, 
(SELECT SUM(markscored) FROM marklist WHERE u.id=m.id) AS TOTAL, 
(SELECT SUM(outof) FROM marklist WHERE u.id=m.id) AS OUTOF, 


((SELECT SUM(markscored) FROM marklist WHERE u.id=m.id)/(SELECT SUM(outof) FROM marklist WHERE u.id=m.id)*100) as percentage 
FROM u, marklist m 
WHERE u.id=m.userid 

Я получаю сообщение об ошибке, как:

ERROR 1242 (21000): подзапрос возвращает более 1 строки

Как я могу это решить?

+0

Подзапрос возвращает более одной строки, и этот подзапрос должен возвращать одно скалярное значение, чтобы оно имело смысл. Пожалуйста, уделите несколько минут и отформатируйте свой вопрос, так же как вы ожидаете, что сообщество SO найдет время, чтобы ответить на него. –

+0

PLS исправить мой запрос, чтобы получить точный результат: + --------- + ------- + ------- + -------- + - ----- + ----------- + ----------- + | название | класс | биология | химия | физика | всего | OUTOF | процент | + -------- + ------- + ------- + --------- + ------- + ----- --- + --------------- + | arun | 5 | 45 | 42 | 40 | 150 | 127 | 84.6 | – Gowrisankar

+0

Пожалуйста, укажите данные образца и ожидаемый результат. Не так приятно просто сбрасывать запрос на SO без объяснения причин. –

ответ

0

Может помочь вам в следующем. Разделитель не может быть 0, поэтому используйте NULLIF, чтобы изменить его на NULL.

SELECT u.name,u.class, 
     SUM(markscored) AS TOTAL, 
     SUM(outof) AS OUTOF 
     SUM(CASE WHEN subject LIKE 'biology' THEN markscored ELSE 0 END) AS biology, 
     SUM(CASE WHEN subject LIKE 'chemistry' THEN markscored ELSE 0 END) AS chemistry, 
     SUM(CASE WHEN subject LIKE 'physics' THEN markscored ELSE 0 END) AS physics, 
     SUM(markscored)/NULLIF(SUM(outof),0) as percentage 

    FROM u, marklist m 
    WHERE u.id=m.userid 
    GROUP BY u.name,u.class 
+0

Спасибо дорогой ..................... – Gowrisankar

+0

Я получаю свой выход ............. спасибо большое ..... – Gowrisankar

+0

SELECT u.name, u.class, SUM (CASE WHEN subject LIKE 'biology' THEN markscored ELSE 0 END) AS biology, SUM (CASE КОГДА предмет LIKE 'chemistry' THEN markscored ELSE 0 END) AS chemistry, SUM (Случай, когда 'физика' тему, как ТОГДА markscored еще 0 концов) как физика, СУММА (markscored) КАК TOTAL, СУММА (OUTOF) КАК OUTOF от и, marklist м ГДЕ u.id = m.userid GROUP BY U .name, u.class; – Gowrisankar

Смежные вопросы