![]() |
Создание запроса к БД, вычисляющее повторы
Проблема такая: есть база (вообще Postgres, но sql язык везде один, так что на это можно не обращать внимания), есть таблица:
| id | phone | operator | region |, с такими полями - phone - номер телефона, operator - принадлежность к оператору, region - принадлежность к региону. Нужна статистика звонков, при этом я делаю так: SELECT count(*) FROM table GROUP BY operator, region, соотвестственно для каждой пары регион-оператор у меня есть количество звонков. Теперь нужно следующее - некоторые телефоны повторяются, так вот нужно вычислить количество повторения для конкретного региона-оператора (сначала вычислять все звонки, а потом делать второй запрос - это очень долго), причем очень хотелось бы это запихнуть в один запрос, сделал вот так: SELECT count(*), count(DISTINCT phone) FROM table ....., но это не то слегка - выбирает количество уникальных номеров... Помогите, плиз:) :help: |
Я не совсем точно понял всё про номера, но предполагаю, что, возможно, тебе нужно уточнить запрос с помощью WHERE region=твой_регион AND WHERE operator=твой_оператор. Количество выбраных записей после этого запроса и будет искомое количество.
|
наверное так:
SELECT region, count(phone) FROM имя таблици GROUP BY region |
Можно попробовать так (таблицу назвал calls)
SELECT COUNT(PHONE) - COUNT((DISTINCT phone)) FROM calls GROUP BY operator, region; У меня в аксесе так не сработало (он count(DISTINCT) не переваривает ), но все таки :) |
Цитата:
Цитата:
Цитата:
допустим есть 20 звонков, из них один чел позвонил 2 раза, другой 3 раза и третий 5 раз, остальные соответственно 10 челов позвонили по 1 разу... Так вот DISTINCT нам даст 13 телефонов, а общее количетсво звонков будет 20, т.е. по этому запросу повторных номеров: 7, а на самом деле их всего 3 (первый, второй и третий челы, которые позвонили больше одного раза)... :rolleyes: Все равно всем спасибо за участие, продолжаем думать, может кто еще подскажет ;) |
Я просто не совсем понял вопрос. Подумал, что нужно просто получить количество повторных звонков, а не номеров, с которых звонили повторно.
Можно так попробовать. SELECT Count(ucalls.skolko_zvonili) AS povtornih_telefonov FROM ( SELECT COUNT(calls.phone) AS skolko_zvonili FROM calls GROUP BY calls.phone ) AS ucalls WHERE ucalls.skolko_zvonili >1; |
Цитата:
|
Ну, это вы уже придираетесь, батенька :p .
|
Цитата:
А в итоге у меня вот что получилось: Цитата:
|
Часовой пояс GMT +4, время: 07:22. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.