как я могу найти уникальную строку, чтобы я мог считать, только если значение не существует в mysql

#mysql

#mysql

Вопрос:

я получил эти строки, например

 id phoneNum status     date
1  123456   no answer
2  123456   no answer
3  123456   no answer
4  123456   no answer
5  123456   no answer
6  123456   no answer
7  123456   ANSWERED


8   567890   no answer  2020-11-19 10:35:05
9   567890   no answer  2020-11-19 10:35:05
10  567890   no answer  2020-11-19 10:35:05
11  567890   no answer  2020-11-19 10:35:05
12  567890   no answer  2020-11-19 10:35:05
13  567890   no answer  2020-11-19 10:35:05
14  567890   no answer  2020-11-19 10:35:05


15  567890   no answer  2020-11-19 10:40:00
16  567890   no answer  2020-11-19 10:40:00
17  567890   no answer  2020-11-19 10:40:00
18  567890   no answer  2020-11-19 10:40:00
19  567890   no answer  2020-11-19 10:40:00
20  567890   no answer  2020-11-19 10:40:00
21  567890   ANSWERED   2020-11-19 10:40:00

  

для этого примера я хочу считать, только если ни на одну из строк не ПОЛУЧЕН ОТВЕТ,
и из этого примера я получу 1 в качестве результата, потому что на номер телефона 567890 вообще не было ОТВЕТА
. номер телефона — это входящий номер телефона, и он звонит с несколькими расширениями, поэтому моя БД получает все
данные о каждом вызове, и мне нужноподсчитать, сколько вызовов не ответили.

что такое оператор SELECT, который мне нужен для получения этого результата

спасибо 🙂

Комментарии:

1. Итак, что вы хотите знать, так это то, что ЕСЛИ вам НЕ ответил ни один, чтобы получить этот номер телефона и напечатать его только один раз? Я прав?

2. если вы замените «no answer» и «answered» на (например) ноль и единицу {0, 1}, тогда вы можете GROUP BY набрать номер телефона и искать MIN или MAX статус. Как и в ссылке, прокомментированной @Strawberry , было бы уместно предоставить полную схему таблицы, как и ваши предыдущие попытки запроса SQL.

3. спасибо за повтор, когда я задаю вопрос в stuck overflow только после того, как я попробовал любой возможный способ, я не очень профессионален в mysql, мой пример выглядит просто, но он не так прост, как кажется, я пробовал с distinct , group by и не нашел правильного пути.

4. Эдуардо, да, и я хочу посчитать его как 1 для этого примера, спасибо

Ответ №1:

Предполагая, что 'no answer' и 'ANSWERED' являются единственными возможными значениями для столбца status , если вам нужны phoneNum s, для которых нет строки с status = 'ANSWERED' , затем сгруппируйте по номеру телефона и задайте условие в предложении HAVING:

 SELECT phoneNum
FROM tablename
GROUP BY phoneNum
HAVING SUM(status = 'ANSWERED') = 0
  

Если вы хотите посчитать телефонные номера, для которых нет ни одной строки status = 'ANSWERED' , тогда используйте NOT EXISTS:

 SELECT COUNT(DISTINCT phoneNum) counter
FROM tablename t
WHERE NOT EXISTS (SELECT 1 FROM tablename WHERE phoneNum = t.phoneNum AND status = 'ANSWERED')
  

Смотрите демонстрацию.

Комментарии:

1. У меня все еще есть проблема с результатами, если тот же номер вызывается снова и получает ответ, тогда счетчик получает минус 1 из-за отдельного источника, я хочу считать только отсутствие ответа от differnet date time, спасибо за любую помощь

2. Добавьте еще одно условие: WHERE NOT EXISTS (SELECT 1 FROM tablename WHERE phoneNum = t.phoneNum AND date = t.date AND status = 'ANSWERED')