Моя голова поворачивается к кашице, пытаясь получить это гнездо вокруг моей головы.Groupwise-max on count() с вложенными подзапросами
Поэтому в основном я получил 2 таблицы:
брокеров, который является моим "пользователь" таблица:
╔══════════╦════════════╦
║ ID ║ EMAIL ║
╠══════════╬════════════╬
║ 1 ║ [email protected] ║
║ 2 ║ [email protected] ║
║ 3 ║ [email protected] ║
╚══════════╩════════════╝
Дома, который дома, которые добавили пользователи. В настоящее время пользователь и дом подключен колонкой электронной почты (я знаю, имеет больше смысла делать с ID):
╔══════════╦════════════╦════════════╦
║ ID ║ TYPE ║ EMAIL ║
╠══════════╬════════════╬════════════╬
║ 1 ║ 1 ║ [email protected] ║
║ 2 ║ 3 ║ [email protected] ║
║ 3 ║ 2 ║ [email protected] ║
║ 4 ║ 3 ║ [email protected] ║
║ 5 ║ 3 ║ [email protected] ║
║ 6 ║ 2 ║ [email protected] ║
║ 7 ║ 3 ║ [email protected] ║
║ 8 ║ 1 ║ [email protected] ║
║ 9 ║ 1 ║ [email protected] ║
║ 10 ║ 2 ║ [email protected] ║
║ 11 ║ 2 ║ [email protected] ║
║ 12 ║ 3 ║ [email protected] ║
║ 13 ║ 3 ║ [email protected] ║
║ 14 ║ 2 ║ [email protected] ║
║ 15 ║ 3 ║ [email protected] ║
║ 16 ║ 1 ║ [email protected] ║
║ 17 ║ 3 ║ [email protected] ║
║ 18 ║ 2 ║ [email protected] ║
║ 19 ║ 2 ║ [email protected] ║
║ 20 ║ 3 ║ [email protected] ║
╚══════════╩════════════╩════════════╝
Теперь то, что я хочу сделать, это то, что я хочу, чтобы выбрать все брокеры, которые имеют тип 3 как самый высокий, самый популярный вид дома. Так, например, если дом типа 3 представляет «Апартаменты», я хочу найти брокеров, которые продают квартиры в качестве своего номера наиболее популярного типа.
Мой текущий запрос:
SELECT b.id, b.email, h.email, h.type, h.total
FROM brokers b
INNER JOIN (
SELECT COUNT(*) AS total, email, type
FROM house
GROUP BY email, type
ORDER BY total DESC
)h ON b.email = h.email
AND h.type = "3"
ORDER BY b.id DESC
Теперь это выбирает только общее количество домов, что брокер имеет для типа 3. Это не только выбрать брокеров, где тип 3 является их самым популярным типом.
Теперь для этого мне нужно использовать так называемое «Groupwise Max». Но я не могу использовать макс() на COUNT (*), как:
MAX(COUNT(*)) as max_value
Так что я думаю, что мне нужно сделать, это гнездо мой запрос дальше с дополнительными подзапросов к первому пункту, а затем выберите макс стоимость.
Я пытаюсь исправить это на некоторое время, и я просто не могу обойти его. Кто-нибудь может помочь?
EDIT: Ожидаемый результат: Исходя из приведенной выше таблицы, Брокер [email protected] получил:
- 1 Дом с типом 1.
- 2 дома Тип 2.
- 4 Дома с Type 3.
Брокер [email protected] получил:
- 2 домов с 1 типом
- 2 дома с Типом 2
- 1 дом с Типом 3.
Брокер [email protected] получил:
- 1 дом с 1 типом .
- 3 дома с типом 2.
- 4 дома с Типом 3.
Поскольку как [email protected], так и [email protected] чаще всего продают House Type 3, они должны быть включены в выход. [email protected] не продает тип 3 как наиболее популярный тип, поэтому он не должен быть включен в результат.
Так выход:
╔══════════╦════════════╦════════════╦
║ ID ║ EMAIL ║ Total ║
╠══════════╬════════════╬════════════╬
║ 1 ║ [email protected] ║ 4 ║
║ 3 ║ [email protected] ║ 4 ║
╚══════════╩════════════╝════════════╝
Можете ли вы поделиться образцовыми данными с ожидаемым выходом? – AK47
Добавлены дополнительные данные выборки и ожидаемый результат и исследование. –