у меня есть результаты из некоторых таких таблиц с (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
Первые заметки:
c.name
к group by
.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
[22:22:56] SQLiteStudio не удалось извлечь метаданные из запроса. Результаты нельзя будет редактировать.
и это дало те же избыточные провинции, что и мой предыдущий запрос
Я не могу отблагодарить вас, теперь он работает на 100% правильно, большое спасибо.
я внес некоторые изменения в запрос, и теперь он показывает c.name как страну, p.name как провинцию, сумму (количество) как покупку_силу, количество () как abs, cast(sum(qty) as float)/count() как реквизит, но я не смог удалить сумму суммы (количество) как покупку_силы , и я не нашел обходного пути
он говорит [12:23:12] Ошибка при выполнении SQL-запроса к базе данных 'g': такого столбца нет: Purchase_power я не смог решить эту проблему, так как я новичок в sqlite
purchase_power
— это псевдоним для sum(qty)
. На самом деле его нет ни в одной таблице. Вы назвали эту сумму purchase_power
.
когда я удаляю его из основного выбора и заменяю max(purchase_power) на max(sum(qty)) у меня возникает эта ошибка [20:58:53] Ошибка при выполнении SQL-запроса к базе данных 'g': такого столбца нет: qty
У вас не может быть двойной агрегации: max(sum(qty)). В одном запросе вы получаете сумму (количество) и даете ей псевдоним, например Purchase_power, а затем используете этот запрос для получения max (purchase_power).
select * from t group by country having max(purchase_power);