imho.ws |
![]() |
![]() |
![]() |
# 1 |
::VIP::
Регистрация: 15.05.2005
Адрес: Питер
Сообщения: 1 194
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Создание запроса к БД, вычисляющее повторы
Проблема такая: есть база (вообще Postgres, но sql язык везде один, так что на это можно не обращать внимания), есть таблица:
| id | phone | operator | region |, с такими полями - phone - номер телефона, operator - принадлежность к оператору, region - принадлежность к региону. Нужна статистика звонков, при этом я делаю так: SELECT count(*) FROM table GROUP BY operator, region, соотвестственно для каждой пары регион-оператор у меня есть количество звонков. Теперь нужно следующее - некоторые телефоны повторяются, так вот нужно вычислить количество повторения для конкретного региона-оператора (сначала вычислять все звонки, а потом делать второй запрос - это очень долго), причем очень хотелось бы это запихнуть в один запрос, сделал вот так: SELECT count(*), count(DISTINCT phone) FROM table ....., но это не то слегка - выбирает количество уникальных номеров... Помогите, плиз ![]() ![]()
__________________
Чтобы воля стала действующим началом, тело должно быть совершенным. |
![]() |
![]() |
# 2 |
Junior Member
Регистрация: 25.09.2004
Адрес: ніжин
Сообщения: 128
![]() ![]() |
Я не совсем точно понял всё про номера, но предполагаю, что, возможно, тебе нужно уточнить запрос с помощью WHERE region=твой_регион AND WHERE operator=твой_оператор. Количество выбраных записей после этого запроса и будет искомое количество.
|
![]() |
![]() |
# 5 | |||
::VIP::
Регистрация: 15.05.2005
Адрес: Питер
Сообщения: 1 194
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
![]() Цитата:
![]() Цитата:
допустим есть 20 звонков, из них один чел позвонил 2 раза, другой 3 раза и третий 5 раз, остальные соответственно 10 челов позвонили по 1 разу... Так вот DISTINCT нам даст 13 телефонов, а общее количетсво звонков будет 20, т.е. по этому запросу повторных номеров: 7, а на самом деле их всего 3 (первый, второй и третий челы, которые позвонили больше одного раза)... ![]() Все равно всем спасибо за участие, продолжаем думать, может кто еще подскажет ![]()
__________________
Чтобы воля стала действующим началом, тело должно быть совершенным. |
|||
![]() |
![]() |
# 6 |
::VIP::
Регистрация: 09.05.2004
Адрес: Киев
Сообщения: 670
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Я просто не совсем понял вопрос. Подумал, что нужно просто получить количество повторных звонков, а не номеров, с которых звонили повторно.
Можно так попробовать. 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; |
![]() |
![]() |
# 7 | |
::VIP::
Регистрация: 15.05.2005
Адрес: Питер
Сообщения: 1 194
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
![]() ![]()
__________________
Чтобы воля стала действующим началом, тело должно быть совершенным. |
|
![]() |
![]() |
# 9 | ||
::VIP::
Регистрация: 15.05.2005
Адрес: Питер
Сообщения: 1 194
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
![]() А в итоге у меня вот что получилось: Цитата:
![]()
__________________
Чтобы воля стала действующим началом, тело должно быть совершенным. |
||
![]() |