Что не так с этим запросом?

  • Автор темы Ozzy1
  • Обновлено
  • 12, May 2024
  • #1
У меня есть таблица Survey_results.

В нем есть поля с названием item, а также user_email.

У меня есть еще одна таблица под названием business_comComponents, в которой есть поля с названием bus_comp и квалифицированные поля.

Для каждого элемента в Survey_results я хочу подсчитать количество строк в business_comComponents, где business_comComponents.bus_comp=survey_result.item И business_comComponents.qualified="yes". Вот что я придумал:

ВЫБЕРИТЕ sr.user_email,COUNT(bc.bus_comp) FROM Survey_results sr, business_comComponents bc ГДЕ sr.item=bc.bus_comp И bc.qualified='yes' ГРУППИРОВАТЬ ПО sr.user_email Кажется, это работает, и это дает это sr.usr COUNT(bc.bus_comp) 2 1 Я хотел бы добавить еще один столбец к результату.

Я хотел бы подсчитать общее количество sr.item=bc.bus_comp без bc.qualified для каждого пользователя.

Как я могу это сделать?

Ozzy1


Рег
01 Jan, 2011

Тем
65

Постов
195

Баллов
560
  • 21, May 2024
  • #2
Что ж, мне удалось получить еще два столбца, используя:

ВЫБЕРИТЕ sr.user_email,COUNT(bc.qualified="yes") ИЗ Survey_results sr, business_comComponents bc ГДЕ sr.item=bc.bus_comp ГРУППИРУЙТЕ ПО sr.user_email

SELECT sr.user_email,COUNT(bc.qualified<>"yes") FROM Survey_results sr, business_comComponents bc ГДЕ sr.item=bc.bus_comp ГРУППИРОВАТЬ ПО sr.user_email

Это не имеет никакого смысла. Разве невозможно иметь квалификацию внутри счетчика?
 

Viraltrends


Рег
01 Jan, 2011

Тем
75

Постов
180

Баллов
565
  • 04, Jun 2024
  • #3
В обоих этих запросах ваше предложение WHERE одинаково, поэтому вы можете попробовать следующее:

ВЫБЕРИТЕ sr.user_email,

COUNT(bc.qualified = 'да') как qДа,

COUNT(bc.qualified) как qAny

ИЗ Survey_results SR, business_comComponents до н.э.

ГДЕ sr.item=bc.bus_comp

ГРУППИРОВАТЬ ПО sr.user_email

или это,

ВЫБЕРИТЕ sr.user_email,

SUM(if(bc.qualified = 'да', 1, 0)) как qДа,

COUNT(bc.qualified) как qAny

ИЗ Survey_results SR, business_comComponents до н.э.

ГДЕ sr.item=bc.bus_comp

ГРУППИРОВАТЬ ПО sr.user_email
 

FERLLL


Рег
22 Jun, 2010

Тем
65

Постов
203

Баллов
568
  • 06, Jun 2024
  • #4
Я бы посоветовал вам использовать для этого отдельный запрос, потому что даже если вы запустите его как подзапрос внутри этого, все равно будет загружено 2 запроса, и таблицы придется сканировать повторно. Ваше предложение «где» для этого выбора отличается, поэтому тот же запрос не будет работать.

Таблицы также будут пересканированы с помощью подзапроса. Так зачем усложнять простой запрос.

Запустите другой.
 

Wheeze


Рег
20 Nov, 2013

Тем
80

Постов
219

Баллов
669
  • 12, Jun 2024
  • #5
Спасибо за ответ.

Я думал об этом.

Вот что я хотел бы сделать:

ВЫБЕРИТЕ sr.user_email,COUNT(bc.qualified="yes") ИЗ Survey_results sr, business_comComponents bc ГДЕ sr.item=bc.bus_comp ГРУППИРУЙТЕ ПО sr.user_email

ВЫБЕРИТЕ sr.user_email,COUNT(bc.qualified) FROM Survey_results sr, business_comComponents bc ГДЕ sr.item=bc.bus_comp ГРУППИРУЙТЕ ПО sr.user_email

Но как мне объединить результаты? Должен ли я создать таблицу TEMP с соотношением квалифицированных/всего? Мне также нужно выполнить некоторые дополнительные вычисления, например умножить каждую полученную строку на заработную плату.

Еще раз спасибо.
 

19ar19


Рег
11 May, 2015

Тем
68

Постов
216

Баллов
556
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно