Я начинаю с этого запроса, который возвращает мне 8 записей с «заявленным» статусом. Я ищу, чтобы увидеть, если любой из адресов в invites-from-address
колонки отличается от такового в moves-from-address
колонки:Как подсчитать результаты предложения where, чтобы рассчитать пропорцию предложения MYSQL select?
SELECT i.id, i.company_id, i.status,
ia_f.base_street as "invites-from-address", a_f.base_street as "moves-from-address",
ia_t.base_street as "invites-to-address", a_t.base_street as "moves-to-address", i.`mover_first_name`,
i.mover_last_name, i.`to_address_id`
FROM invites i
JOIN moves m ON i.id = m.`claimed_invite_id`
JOIN `invite_addresses` ia_f ON ia_f.id = i.`from_address_id`
JOIN addresses a_f ON a_f.id = m.from_address_id
JOIN `invite_addresses` ia_t ON ia_t.id = i.to_address_id
JOIN addresses a_t ON a_t.id = m.to_address_id
WHERE i.`company_id` = 1040345
GROUP BY id
То, что я пытаюсь сделать в этом запросе ниже, чтобы создать average_discrepancy
колонки на который показывает долю адресов, которые отличаются от invites-from-address
и moves-from-address
. Я был в состоянии успешно проверить адреса неточностей с помощью пункта WHERE
, который проверяет, что ia_f.base_street
не равна a_f.base_street
(которые псевдонимы столбцов invites-from-address
и moves-from-address
соответственно), но когда я ставлю эту WHERE
положения внутри функций count
в моих SELECT
причинах он не работает. Это потому, что я не могу разместить WHERE
в рамках функции SELECT
или count
или обоих? И есть ли также проблема с попыткой разделить результаты двух вызовов функции count
в моем предложении SELECT
?
SELECT i.id, i.company_id, i.status,
count(WHERE ia_f.base_street != a_f.base_street)/count(i.status="claimed") as "average_discrepancy",
ia_f.base_street as "invites-from-address", a_f.base_street as "moves-from-address",
ia_t.base_street as "invites-to-address", a_t.base_street as "moves-to-address",
i.`mover_first_name`,
i.mover_last_name, i.`to_address_id`
FROM invites i
JOIN moves m ON i.id = m.`claimed_invite_id`
JOIN `invite_addresses` ia_f ON ia_f.id = i.`from_address_id`
JOIN addresses a_f ON a_f.id = m.from_address_id
JOIN `invite_addresses` ia_t ON ia_t.id = i.to_address_id
JOIN addresses a_t ON a_t.id = m.to_address_id
WHERE i.`company_id` = 1040345
AND i.status = "claimed"
Это было! Последующий вопрос, если я хочу показать только записи, у которых есть несоответствие адресов, какую статью я должен использовать? Есть ли способ построить это условие для реализации этого желаемого результата? – phizzy
Вы можете обернуть это внутри другого оператора SELECT, чтобы вытащить только те записи, которые вы хотите показать. Проблема с изменением этого запроса, чтобы показать только те записи, состоит в том, что ваши операции SUM будут меняться, если мы изменим результат запроса. Если это были завернуты в другой запрос, это будет выглядеть примерно так: «SELECT sub.id, sub.company_id, sub.status, sub.average_discrepancy, sub.invites_from_address, moves_from_address, moves_to_address, sub.mover_first_name , sub.mover_last_name, sub.to_address_id ОТ \t! (- Оригинальный запрос здесь идет) свеженький WHERE sub.base_street = sub_f.base – ghg565