#mysql #select
#mysql #выберите
Вопрос:
У меня есть таблица, подобная следующей:
ID | Name | Type | State | County
-------------------------------------------------------------------
1 | Rheinland-Pfalz | State | Rheinland-Pfalz | NULL
2 | Trier | City | Rheinland-Pfalz | NULL
3 | Alzey-Worms | County | Rheinland-Pfalz | Alzey-Worms
4 | Alzey | City | Rheinland-Pfalz | Alzey-Worms
5 | Worms | City | Rheinland-Pfalz | Alzey-Worms
6 | Lorem | County | Rheinland-Pfalz | Lorem
7 | Ipsum | City | Rheinland-Pfalz | Lorem
Теперь я хочу получить все округа в штате «Рейнланд-Пфальц» и включенные в них города и все свободные города округа.
Желаемый результат:
ID | Name | Type | Included
-------------------------------------------------------------------
2 | Trier | City | NULL
3 | Alzey-Worms | County | 2
6 | Lorem | County | 1
Мой запрос:
select a.id, a.name, a.type,
(select count(*) from data where a.type="city" AND b.county=a.county) as included
from data as a, data as b
WHERE a.location_type='county' AND a.state = 'Rheinland-Pfalz' OR a.type='city' AND a.gmap_area1 = 'Rheinland-Pfalz' AND a.county IS NULL
order by a.name asc
Мой результат:
ID | Name | Type | Included
-------------------------------------------------------------------
3 | Alzey-Worms | County | 0
3 | Alzey-Worms | County | 0
3 | Alzey-Worms | County | 0
3 | Alzey-Worms | County | 0
3 | Alzey-Worms | County | 0
…. И ТАК ДАЛЕЕ
Комментарии:
1. Работает ли приведенный выше запрос?
2. @AT-2016: Нет, я обновил сообщение своим результатом…
Ответ №1:
Не стесняйтесь использовать круглые скобки
SELECT
a.id,
a.name,
a.type,
(SELECT COUNT(*) FROM data
WHERE type='city' AND county=a.county) AS included
FROM data AS a
WHERE
a.state='Rheinland-Pfalz' AND
(a.type='county' OR (a.type='city' AND a.county IS NULL));
Комментарии:
1. А Ш Е С О М Е! Большое спасибо! Было не так уж далеко 🙂
Ответ №2:
один из способов, которым вы могли бы попробовать предложение group — не проверено:
select count(*) from data where type in ('state','County') where
state = 'Rheinland-Pfalz' group by type,state;
Также следует учитывать, что значения ID или подробные значения уровня поля не будут отображаться в подсчетах
Комментарии:
1. Попробуйте добавить поля в тычинки выбора и сгруппировать по ним — поля уровня детализации, такие как идентификаторы, не должны включаться
2. …Выберите имя, тип, количество (*) … Группируйте по имени, введите