Сумма сумм MYSQL

192
18 января 2022, 03:40

Как посчитать сумму сумм в mysql? Т.е у меня есть запрос

 `SELECT SUM(Prstoim)/COUNT(*), Yeardoc FROM table.dbf Where country IN ('Россия', 'Германия', 'Италия', 'Нидерланды', 'Япония')   Group BY yeardoc INTO cursor test`

Он считает среднюю суммарную стоимость приборов по странам по годам. Но он считает таким образом, что если например в России суммарная стоимость 1000 и 20 приборов, а в Германии суммарная стоимость 2000 и 13 приборов, то он сначала считает суммарные стоимости в обоих странах (3000) и суммарное кол-во приборов(33) и после находит среднюю стоимость. А как можно найти сумму сумм, т.е чтобы сначала он посчитал в России, т.е 1000/20, после в германии 3000/13 и сложил две суммы?

Answer 1

Вам надо использовать CTE. (заранее извиняюсь, если немного в синтаксе напутал, в основном имею дело с mssql)

WITH testCTE (country, av, yeardoc) as 
(SELECT 
    country,
    SUM(Prstoim)/COUNT(*) as av, 
    Yeardoc 
FROM table.dbf 
Where country IN ('Россия', 'Германия', 'Италия', 'Нидерланды', 'Япония')   
Group BY yeardoc, country)
SELECT 
    SUM(av)
FROM testCTE

Сначала в CTE вы получаете набор данных, где для каждой страны и года посчитано значение SUM(Prstoim)/COUNT(*), а затем получаете общую сумму, суммируя данные из предварительного набора.

READ ALSO
Как вывести пару объектов массива сразу

Как вывести пару объектов массива сразу

Возможно ли вывести сразу несколько объектов массива?

74
Добавить поддомен через js

Добавить поддомен через js

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

145
Чередование регистра

Чередование регистра

Всем привет, ребята помогите решить задачуСуть, у меня есть строка, и мне нужно сделать так, что бы верхний регистр всегда менялся на нижний,...

101
Следить за изменением в бд mysql

Следить за изменением в бд mysql

Нужно следить за изменением в бд, если есть изменение в таблице, то вывестиЯ делаю через ajax, но это нагрузка на бд

66