#mysql #sql
#mysql #sql
Вопрос:
Мне нужно запустить запрос к базе данных потенциальных клиентов, в котором необходимо указать название магазина, общее количество потенциальных клиентов для этого магазина и общее количество преобразованных потенциальных клиентов. Пока что ниже приведено то, что я получил:
SELECT stores.store_name as Store, COUNT(*) as "Total Lead",
(SELECT COUNT(*) as "Converted Lead" FROM leads WHERE lead_status_id = 5)
FROM "leads"
INNER JOIN "employee_leads" ON "employee_leads"."lead_id" = "leads"."id"
INNER JOIN "employees" ON "employees"."id" = "employee_leads"."employee_id"
INNER JOIN "emp_stores" ON "emp_stores"."employee_id" = "employees"."id"
INNER JOIN "stores" ON "stores"."id" = "emp_stores"."store_id"
GROUP BY store_name;
Однако это неправильно, потому что преобразованная часть вычисляла все преобразованные запросы, а не по определенному хранилищу. Результат, который я получил, приведен ниже:
------------ ------------- ----------------
| Store | Total Lead | Converted Lead |
------------ ------------- ----------------
| Store1 | 10 | 10 |
| Store2 | 14 | 10 |
| Store3 | 17 | 10 |
------------ ------------- ----------------
В столбце «Преобразованный интерес» в настоящее время указано общее количество преобразованных интересов во всех магазинах. Столбец «Преобразованный интерес», предположительно, равен 4 для Store1, 3 для Store2 и 4 для Store3. Я попытался выполнить подгруппу by, однако я получил ошибку, потому что для каждого хранилища будет более 1 строки. Мне нужен запрос, вычисляющий преобразованный интерес каждого магазина, который выглядит примерно так, как показано ниже:
------------ ------------- ----------------
| Store | Total Lead | Converted Lead |
------------ ------------- ----------------
| Store1 | 10 | 4 |
| Store2 | 14 | 3 |
| Store3 | 17 | 4 |
------------ ------------- ----------------
Может кто-нибудь указать мне правильное направление? Спасибо
Ответ №1:
Вы можете попробовать использовать агрегатную функцию condition вместо подзапроса.
SELECT stores.store_name as Store, COUNT(*) as "Total Lead",
COUNT(CASE WHEN lead_status_id = 5 THEN 1 END) "Converted Lead"
FROM "leads"
INNER JOIN "employee_leads" ON "employee_leads"."lead_id" = "leads"."id"
INNER JOIN "employees" ON "employees"."id" = "employee_leads"."employee_id"
INNER JOIN "emp_stores" ON "emp_stores"."employee_id" = "employees"."id"
INNER JOIN "stores" ON "stores"."id" = "emp_stores"."store_id"
GROUP BY store_name;
если вы используете mysql, вы можете попробовать использовать COUNT(lead_status_id = 5)
SELECT stores.store_name as Store, COUNT(*) as "Total Lead",
COUNT(lead_status_id = 5) "Converted Lead"
FROM "leads"
INNER JOIN "employee_leads" ON "employee_leads"."lead_id" = "leads"."id"
INNER JOIN "employees" ON "employees"."id" = "employee_leads"."employee_id"
INNER JOIN "emp_stores" ON "emp_stores"."employee_id" = "employees"."id"
INNER JOIN "stores" ON "stores"."id" = "emp_stores"."store_id"
GROUP BY store_name;
Ответ №2:
Вы не соотносите подзапрос с названием хранилища. Хотя это можно было бы сделать в его where
предложении, и более простым подходом было бы подсчитать case
выражение, чтобы подсчитывать только лиды с соответствующим статусом:
SELECT stores.store_name as Store,
COUNT(*) as "Total Lead",
COUNT(CASE lead_status_id WHEN 5 THEN 1 END) AS "Converted Lead"
FROM "leads"
INNER JOIN "employee_leads" ON "employee_leads"."lead_id" = "leads"."id"
INNER JOIN "employees" ON "employees"."id" = "employee_leads"."employee_id"
INNER JOIN "emp_stores" ON "emp_stores"."employee_id" = "employees"."id"
INNER JOIN "stores" ON "stores"."id" = "emp_stores"."store_id"
GROUP BY store_name;
Ответ №3:
Пожалуйста, попробуйте это.
SELECT stores.store_name as Store, COUNT(*) as "Total Lead",
(SELECT COUNT(*) as "Converted Lead" FROM leads AS SS WHERE SS.id =A.id AND lead_status_id = 5)
FROM "leads" AS A
INNER JOIN "employee_leads" ON "employee_leads"."lead_id" = "A"."id"
INNER JOIN "employees" ON "employees"."id" = "employee_leads"."employee_id"
INNER JOIN "emp_stores" ON "emp_stores"."employee_id" = "employees"."id"
INNER JOIN "stores" ON "stores"."id" = "emp_stores"."store_id"
GROUP BY store_name;