#sql #sqlite #sum #max
#sql #sqlite #сумма #максимальное
Вопрос:
у меня есть результаты из некоторых таблиц, подобных этой, с (700 строк)
country province purchase_power
Angola Cuanza Sul 10
Angola Huambo 2
Angola Namibe 2
Angola Uige 12
Argentina Buenos Aires 15
Argentina Catamarca 3
Argentina Corrientes 1
Argentina Jujuy 13
Argentina La Rioja 17
Argentina Mendoza 1
Argentina Misiones 1
Argentina Neuquen 2
Argentina San Juan 10
Argentina San Luis 4
Argentina Santa Cruz 1
я получил это, используя этот запрос
select c.name as country,p.name as province,sum(qty) as purchase_power
from province p,purchases,country c
where P.rowid = Purchases.province and qty>0 and c.code=p.country and product=0
group by p.name
мне нужна только провинция с наибольшей покупательской способностью для каждой страны
следует учитывать производительность
ex output
country province purchase_power
Angola Uige 12
Argentina La Rioja 17
Комментарии:
1.
select * from t group by country having max(purchase_power);
Ответ №1:
Первые примечания:
- Вы должны использовать явные объединения вместо неявных.
- Также необходимо добавить
c.name
вgroup by
. - Хотя SQLite позволяет выбирать столбцы, не используемые в
group by
предложении, если вы не хотите сюрпризов, вы должны следовать стандартному SQL.
Теперь, поскольку производительность является проблемой, вы можете использовать CTE для своего запроса и выполнить его только один раз, чтобы использовать его результаты:
with cte as (
select
c.name as country,
p.name as province,
sum(t.qty) as purchase_power
from province p
inner join purchases t on p.rowid = t.province
inner join country c on c.code = p.country
where t.qty > 0 and t.product=0
group by c.name, p.name
)
select cte.* from cte
inner join (
select country, max(purchase_power) purchase_power
from cte
group by country
) t on t.country = cte.country and t.purchase_power = cte.purchase_power
Комментарии:
1. те же результаты ? что вы имеете в виду?
2. [22:22:56] SQLiteStudio не удалось извлечь метаданные из запроса. Результаты не будут доступны для редактирования.
3. и он дал те же избыточные области, что и мой предыдущий запрос
4. я не могу отблагодарить вас достаточно, теперь он работает на 100% правильно, большое вам спасибо.
5. я внес некоторые изменения в запрос, и теперь он отображается c.name как страна, p.name как провинция, sum(qty) как purchase_power, count( ) как abs, cast(sum(qty) как float) / count( ) как prop, но я не смог удалить sum sum(кол-во) как purchase_power, и я не нашел способа обойти это