Три очень связанных вопроса SQL (я на самом деле использую mySQL):
Предполагая таблицу людей с двумя столбцами, название страны,
1) Как я могу показать людей, имеющих сограждан??Я могу отобразить количество граждан по странам:
select country, count(*) as fellow_citizens
from people
group by country
Но я не могу показать те записи, для которых fellow_citizens> 1. Следующее недопустимо:
select name, country, count(*) as fellow_citizens
from people
group by country
where fellow_citizens > 1;
... и не будет тем, что я хочу, так как я не хочу группировать людей.
2) Чтобы решить вышесказанное, у меня была идея сохранить fellow_citizens в новом столбце.Это звучит как разновидность таких вопросов, как MySQL: подсчет записей из одной таблицы и затем обновление другой .Разница в том, что я хочу обновить ту же таблицу.
Однако полученный здесь ответ не работает:
update people as dest
set fellow_citizens =
(select count(*) from people as src where src.country = dest.country);
Я получаю это сообщение об ошибке:
Вы не можете указать целевую таблицу 'dest' для обновления в предложении FROM
Похоже, мне нужно сделать это через другую временную таблицу.Можно ли это сделать без временной таблицы?
3) Как вариант выше, как я могу обновить столбец счетчиком людей по стране?Я обнаружил, что могу обновить глобальный счетчик примерно так:
set @i:=0; update people set counter = @i:=@i+1 order by country;
Но здесь я хотел бы сбросить счетчик @i при изменении значения страны.
Есть ли способсделать это в MySQL, не переходя на полномасштабный процедурный код?