Я ищу эффективную альтернативу подзапросам/объединениям для этого запроса. Скажем, я таблица, которая хранит информацию о компаниях со следующими столбцами:MySQL альтернатива подзапросам/присоединению
- имя: название компании
- состояние: состояние компании находится в
- дохода: годовой доход компания
- сотрудников: сколько сотрудников этой компании есть
- active_business: Wether или нет компании в бизнесе (1 = да, 0 = нет)
Предположим, что из этой таблицы я хочу узнать, сколько компаний в каждом штате удовлетворяют требованиям относительно минимальной суммы дохода, а также того, сколько компаний удовлетворяют требованиям для минимального количества сотрудников. Это может быть выражено в виде следующего подзапроса (также может быть записана в виде объединения):
SELECT state,
(
SELECT count(*)
FROM records AS a
WHERE a.state = records.state
AND a.revenue > 1000000
) AS companies_with_min_revenue,
(
SELECT count(*)
FROM records AS a
WHERE a.state = records.state
AND a.employees > 10
) AS companies_with_min_employees
FROM records
WHERE active_business = 1
GROUP BY state
Мой вопрос заключается в следующем. Могу ли я сделать это без подзапросов или соединений? Так как запрос уже выполняет итерацию по каждой строке (нет индексов), есть ли способ добавить условие, что если строка удовлетворяет минимальным требованиям к доходам и находится в одном состоянии, она будет увеличивать некоторый счетчик для запроса (похоже на карту/сокращение)?
Нет индексов? Ну, тогда твоя проблема. Решаемые. – Strawberry
Как правило, эта ситуация была бы проиндексирована. Однако это не работает на mysql. Я использую хранилище данных JSON в Memsql с динамическими полями, представленными пользователями, поэтому индексы по определенным значениям не были правильным путем. Кроме того, он работает очень быстро, поскольку memsql находится в памяти, поэтому индексы не нужны. Я задал такой вопрос, поскольку он был логически эквивалентен этой проблеме более простым способом. – user396404