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

  • Автор темы Ozzy1
  • 81
  • Обновлено
  • 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

Тем
1

Постов
2

Баллов
12
  • 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

Тем
0

Постов
2

Баллов
2
  • 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

Тем
6

Постов
12

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

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

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

Wheeze


Рег
20 Nov, 2013

Тем
2

Постов
4

Баллов
24
  • 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

Тем
1

Постов
3

Баллов
13
Тем
49554
Комментарии
57426
Опыт
552966

Интересно