СУММА(), ЗАПРОС ПЕРЕКРЕСТНОГО СОЕДИНЕНИЯ

У меня есть запрос MYSQL с SUM и CROSS JOIN, он работает нормально.

ЗАПРОС МАЙСЛ:

SELECT SUM(totexec/(pass_count+fail_count))/d.total  COUNT FROM test_schedule CROSS JOIN ( SELECT COUNT(*) total FROM test_schedule WHERE project='JupiterQA' ) d WHERE project='JupiterQA'

Но я пытаюсь выполнить тот же запрос в MSSQL, показывая, что «столбец 'd.total' недействителен в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY».

После этого я добавил GROUP BY a.total в конце запроса, ОШИБКА ЕСТЬ: ошибка деления на ноль.

У меня есть записи во всей таблице, неправильный ли запрос?


person user3114967    schedule 11.02.2015    source источник
comment
должен a.total d.total в группе по?   -  person Jens    schedule 11.02.2015
comment
У меня только псевдоним d, так что я использую d.total. но всего?   -  person user3114967    schedule 11.02.2015
comment
В вашем вопросе GROUP BY a.total.   -  person Jens    schedule 11.02.2015
comment
О, извините, что только d.total   -  person user3114967    schedule 11.02.2015


Ответы (2)


я не спрашиваю, почему вы используете перекрестное соединение: D, просто добавьте предложение group by в свой запрос

SELECT SUM(totexec(pass_count+fail_count))d.total  COUNT FROM test_schedule CROSS JOIN ( SELECT COUNT(*) total FROM test_schedule WHERE project='JupiterQA' ) d WHERE project='JupiterQA' GROUP BY d.total
person Alexis Peters    schedule 11.02.2015
comment
Я добавил GROUP BY d.total только после этого я получил ошибку. Я упомянул выше сам вопрос. - person user3114967; 11.02.2015
comment
хорошо, почему вы используете косую черту? mssql может интерпретировать это как деление на d.total - person Alexis Peters; 11.02.2015
comment
я делаю операцию деления, без косой черты, как можно выполнить операцию деления? - person user3114967; 11.02.2015

Это должно быть эквивалентно запросу MYSQL:

SELECT tSum / dTotal AS COUNT
FROM (
   SELECT SUM(totexec / (pass_count+fail_count)) AS tSum, d.total AS dTotal 
   FROM test_schedule 
   CROSS JOIN ( SELECT COUNT(*) total 
                FROM test_schedule 
                WHERE project='JupiterQA' ) d 
   WHERE project='JupiterQA' ) t

Хотя я не вижу необходимости в CROSS JOIN. Это также должно выполнять работу:

SELECT tSum / ( SELECT COUNT(*) 
                FROM test_schedule 
                WHERE project='JupiterQA' ) AS COUNT
FROM (
   SELECT SUM(totexec / (pass_count+fail_count)) AS tSum 
   FROM test_schedule 
   WHERE project='JupiterQA' ) t
person Giorgos Betsos    schedule 11.02.2015
comment
его ошибка деления на ноль, но у меня есть данные - person user3114967; 11.02.2015
comment
@ user3114967 Либо pass_count+fail_count, либо SELECT COUNT(*) total FROM test_schedule WHERE project='JupiterQA' равно нулю. - person Giorgos Betsos; 11.02.2015
comment
@user3114967 user3114967 Сначала выберите pass_count+fail_count и SELECT COUNT(*) total ..., чтобы увидеть, какие значения вы получите. - person Giorgos Betsos; 11.02.2015
comment
сумма (pass_count+fail_count) значение: 1432 SELECT COUNT(*) total FROM test_schedule WHERE project='JupiterQA' значение: 1257 - person user3114967; 11.02.2015
comment
@user3114967 user3114967 Что вы получите, если выполните: SELECT SUM(totexec / (pass_count+fail_count)) FROM test_schedule WHERE project = 'JupiterQA'? - person Giorgos Betsos; 11.02.2015
comment
@user3114967 user3114967 Вам наконец удалось справиться с ошибкой деления на ноль? Мне просто любопытно, поскольку нет очевидной причины возникновения этой ошибки. - person Giorgos Betsos; 15.02.2015