Расчет суммы суммы SQL [дубликат]

Это следующее решение является наиболее компактным, я мог бы придумать, что это O (n).

public static IEnumerable<T[]> Chunk<T>(IEnumerable<T> source, int chunksize)
{
    var list = source as IList<T> ?? source.ToList();
    for (int start = 0; start < list.Count; start += chunksize)
    {
        T[] chunk = new T[Math.Min(chunksize, list.Count - start)];
        for (int i = 0; i < chunk.Length; i++)
            chunk[i] = list[start + i];

        yield return chunk;
    }
}
19
задан John Woo 1 March 2013 в 05:18
поделиться

5 ответов

Да. Возможно :D

SELECT  SUM(totalHours) totalHours
FROM
        ( 
            select sum(hours) totalHours from resource
            UNION ALL
            select sum(hours) totalHours from projects-time
        ) s

В качестве побочного элемента, имя_таблицы projects-time должно быть разграничено, чтобы избежать синтаксической ошибки. Символы разделителя различаются по используемой СУБД.

45
ответ дан John Woo 21 August 2018 в 00:31
поделиться
  • 1
    Хорошая работа. Спасибо за это. – Rhys 1 March 2013 в 05:12
  • 2
    вы можете :D – John Woo 1 March 2013 в 05:13
  • 3
    Что такое s на конце? Это опечатка? – Rhys 1 March 2013 в 05:14
  • 4
    @Rhys нет, это ALIAS подзапроса. кстати, What RDBMS , который вы используете? RDBMS означает Система управления реляционными базами данных . RDBMS is the basis for SQL, а также для всех современных систем баз данных, таких как MS SQL Server, IBM DB2, Oracle, MySQL и т. д. ... – John Woo 1 March 2013 в 05:15
  • 5

UNION ALL один раз, агрегировать один раз:

SELECT sum(hours) AS total_hours
FROM   (
   SELECT hours FROM resource
   UNION ALL
   SELECT hours FROM "projects-time" -- illegal name without quotes in most RDBMS
   ) x
10
ответ дан Erwin Brandstetter 21 August 2018 в 00:31
поделиться

Если вы хотите использовать несколько операций

select (sel1.s1+sel2+s2)

(select sum(hours) s1 from resource) sel1
join 
(select sum(hours) s2 from projects-time)sel2
on sel1.s1=sel2.s2
-1
ответ дан EsmaeelE 21 August 2018 в 00:31
поделиться

Что-то простое, подобное этому, может быть выполнено с помощью подзапросов в предложении select:

select ((select sum(hours) from resource) +
        (select sum(hours) from projects-time)
       ) as totalHours

Для такого простого запроса, как этот, такой подзапрос является разумным.

В некоторых базах данных вам может потребоваться добавить from dual для компиляции запроса.

Если вы хотите выводить каждый отдельно:

select (select sum(hours) from resource) as ResourceHours,
       (select sum(hours) from projects-time) as ProjectHours

Если вы хотите, чтобы оба и сумма, подзапрос удобен:

select ResourceHours, ProjectHours, (ResourceHours+ProjecctHours) as TotalHours
from (select (select sum(hours) from resource) as ResourceHours,
             (select sum(hours) from projects-time) as ProjectHours
     ) t
23
ответ дан Gordon Linoff 21 August 2018 в 00:31
поделиться
  • 1
    Мне нравится это решение, потому что оно работает для сложения и вычитания – csharpsql 9 August 2017 в 11:09
  • 2
    это также помогло мне – moonir01 25 March 2018 в 02:32

Повторить для множественных агрегаций, таких как SELECT sum (AMOUNT) AS TOTAL_AMOUNT FROM (SELECT AMOUNT FROM table_1 UNION ALL SELECT AMOUNT FROM table_2 UNION ALL SELECT ASSURED_SUM FROM table_3 ....)

0
ответ дан Pratik Roy 21 August 2018 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: