Выберите максимальную сумму 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
select * from t group by country having max(purchase_power);
tonypdmtr 11.04.2019 01:12
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
1
259
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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
те же результаты? что ты имеешь в виду?
forpas 10.04.2019 22:23

[22:22:56] SQLiteStudio не удалось извлечь метаданные из запроса. Результаты нельзя будет редактировать.

Mohammed Yassen Kadhim 10.04.2019 22:23

и это дало те же избыточные провинции, что и мой предыдущий запрос

Mohammed Yassen Kadhim 10.04.2019 22:24

Я не могу отблагодарить вас, теперь он работает на 100% правильно, большое спасибо.

Mohammed Yassen Kadhim 10.04.2019 22:29

я внес некоторые изменения в запрос, и теперь он показывает c.name как страну, p.name как провинцию, сумму (количество) как покупку_силу, количество () как abs, cast(sum(qty) as float)/count() как реквизит, но я не смог удалить сумму суммы (количество) как покупку_силы , и я не нашел обходного пути

Mohammed Yassen Kadhim 12.04.2019 04:54
я не мог удалить сумму sum(qty) как Purchase_power почему? Если вы не хотите, просто удалите его.
forpas 12.04.2019 09:07

он говорит [12:23:12] Ошибка при выполнении SQL-запроса к базе данных 'g': такого столбца нет: Purchase_power я не смог решить эту проблему, так как я новичок в sqlite

Mohammed Yassen Kadhim 13.04.2019 12:24
purchase_power — это псевдоним для sum(qty). На самом деле его нет ни в одной таблице. Вы назвали эту сумму purchase_power.
forpas 13.04.2019 12:31

когда я удаляю его из основного выбора и заменяю max(purchase_power) на max(sum(qty)) у меня возникает эта ошибка [20:58:53] Ошибка при выполнении SQL-запроса к базе данных 'g': такого столбца нет: qty

Mohammed Yassen Kadhim 13.04.2019 21:02

У вас не может быть двойной агрегации: max(sum(qty)). В одном запросе вы получаете сумму (количество) и даете ей псевдоним, например Purchase_power, а затем используете этот запрос для получения max (purchase_power).

forpas 13.04.2019 21:05

Другие вопросы по теме