Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

SQL запрос   Найти похожие ветки 

 
maxi ©   (2004-06-09 08:44) [0]

помогите, пожалуйста, надо сделать запрос, который найдет 6 – ть клиентов, которые встречаются наибольшее количество раз в таблице из 6 столбцов???


 
Johnmen ©   (2004-06-09 09:02) [1]


SELECT клиент, COUNT(*) FROM Table
GROUP BY клиент
ORDER BY 2 DESC

Первые 6 записей в НД - твои...:)


 
Соловьев ©   (2004-06-09 09:14) [2]


> [1] Johnmen ©   (09.06.04 09:02)

а по остальным 5 столбцам? :)


 
Sandman25 ©   (2004-06-09 09:54) [3]

select C.id, sum(
 case when L.id1 = C.id then 1 else 0 end +
 case when L.id2 = C.id then 1 else 0 end +
 case when L.id3 = C.id then 1 else 0 end +
 case when L.id4 = C.id then 1 else 0 end +
 case when L.id5 = C.id then 1 else 0 end +
 case when L.id6 = C.id then 1 else 0 end
)
 from clients C,
      links L
 where L.id1 = C.id
    or L.id2 = C.id
    or L.id3 = C.id
    or L.id4 = C.id
    or L.id5 = C.id
    or L.id6 = C.id
GROUP BY 1
ORDER BY 2 DESC

Если можно заменить case на Cast(L.idi=C.id as Integer), то еще лучше :)


 
Johnmen ©   (2004-06-09 09:55) [4]

>Sandman25 ©   (09.06.04 09:54) [3]

case в IB ?
:)


 
Соловьев ©   (2004-06-09 09:55) [5]


> case when L.id6 = C.id then 1 else 0 end

в ИБ такого нет - это ФБ

> Cast(L.idi=C.id as Integer),

такое не прокатит


 
Sandman25 ©   (2004-06-09 10:04) [6]

А так?
Sum(
Min(Abs(L.id1 - C.id), 1) +
Min(Abs(L.id2 - C.id), 1) +
 ...
)
Или Min и Abs тоже нет?


 
Sandman25 ©   (2004-06-09 10:04) [7]

Точнее
Sum(6 -
(Min(Abs(L.id1 - C.id), 1) +
Min(Abs(L.id2 - C.id), 1) +
...
)
)


 
Johnmen ©   (2004-06-09 10:06) [8]

>Sandman25 ©   (09.06.04 10:04) [6]
>Или Min и Abs тоже нет?

min/max - стандартизованные агрегатные ф-ии
abs - нет


 
Sandman25 ©   (2004-06-09 10:08) [9]

[8] Johnmen ©   (09.06.04 10:06)

Это другой min, c нсколькими параметрами. Min(1,2,3) = 1
Но если abs нет, то min уже не важен :)


 
Johnmen ©   (2004-06-09 10:11) [10]

А вот интересно, парсер+анализатор, видимо, "понимают" разницу между min-агр.ф-ей и min-UDF-ф-ей...


 
Sandman25 ©   (2004-06-09 10:15) [11]

Я условно назвал эту функцию Min, в реальности она может называться иначе. Насколько я помню, в MS SQL она действительно называется иначе.
А что касается вопроса из [10], то наверное, по числу параметров различает. В некоторых СУБД вообще можно завести кучу ХП с одним названием, но разными типами или числом параметров.


 
maxi ©   (2004-06-10 13:01) [12]

А поточнее можна!!!! и что луче


 
Sandman25 ©   (2004-06-10 15:00) [13]

[12] maxi ©   (10.06.04 13:01)

Лучше переделать структуру БД. Я так понимаю, что это 6 видов ролей клиента. Если добавится 7, то придется изменять таблицу. Лучше сразу хранить в виде (клиент, роль). Тогда [1] Johnmen ©   (09.06.04 09:02)
вполне подойдет.


 
maxi ©   (2004-06-11 13:36) [14]

нет там 45 клиентов, под номерами от 1 до 45, в таблице си 6 столбцов, и где-то 540 строк, из них надо найти 6 которые встречаются наибольшее количество раз



Страницы: 1 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
1-1088420915
Morrison
2004-06-28 15:08
2004.07.11
Как сгенерировать запуск браузера с некоторым адресом?


14-1086722980
Nic
2004-06-08 23:29
2004.07.11
Восттановление СССР?


3-1086756262
maxi
2004-06-09 08:44
2004.07.11
SQL запрос


8-1082855383
Dr.zlo
2004-04-25 05:09
2004.07.11
Хорошие хинты


3-1086753895
Valera
2004-06-09 08:04
2004.07.11
master-detail с помощюю FIBPlus