Самый внутренний запрос выбирает один (случайный) адрес из всех, определенных для клиентов с одинаковыми именами.(Между прочим, state
, кстати, даже не должен принадлежать адресу)
Похоже, что запрос подсчитывает клиентов по штатам, городам и улицам.Что делать, если у клиента более одного адреса?Должны ли они учитываться один или два раза (и если один раз, по какому адресу)?
Другими словами, что должен возвращать запрос для таких адресов:
Customer1 NY NYC Broadway
Customer1 CA LA Sunset Boulevard
Customer2 CA LA Sunset Boulevard
У вас есть триили два клиента в общей сложности?Если два, они оба живут в LA
?
Обновление:
Если вы хотите дубликаты на каждом адресе, то вам не нужен самый внутренний GROUP BY
at all:
SELECT GROUP_CONCAT (DISTINCT customer_name) customer_names,
COUNT(DISTINCT customer_name) number_of_customers,
line_1,
line_2,
city,
state_name,
zip
FROM address ad
JOIN state s
ON s.id = ad.state_id
JOIN account_address aa
ON aa.address_id = ad.id
JOIN account a
ON a.id = aa.account_id
JOIN customer c
ON c.id = a.customer_id
GROUP BY
ad.state_id, ad.city, ad.line_1, ad.line_2
Создайте индекс на address (state_id, city, line_1, line_2)
, чтобы это работало быстрее.
Обратите внимание, что если возможно иметь разные почтовые индексы для одинаковых адресов, не определено, какиеиз них будут возвращены.