![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL запрос [D6, D7, IB6.x]
maxi © (2004-06-09 08:44:00)помогите, пожалуйста, надо сделать запрос, который найдет 6 – ть клиентов, которые встречаются наибольшее количество раз в таблице из 6 столбцов???
maxi (2004-06-11 13:36:00) [1]нет там 45 клиентов, под номерами от 1 до 45, в таблице си 6 столбцов, и где-то 540 строк, из них надо найти 6 которые встречаются наибольшее количество раз
Sandman25 (2004-06-10 15:00:00) [2][12] maxi © (10.06.04 13:01)
Лучше переделать структуру БД. Я так понимаю, что это 6 видов ролей клиента. Если добавится 7, то придется изменять таблицу. Лучше сразу хранить в виде (клиент, роль). Тогда [1] Johnmen © (09.06.04 09:02)
вполне подойдет.
maxi (2004-06-10 13:01:00) [3]А поточнее можна!!!! и что луче
Sandman25 (2004-06-09 10:15:00) [4]Я условно назвал эту функцию Min, в реальности она может называться иначе. Насколько я помню, в MS SQL она действительно называется иначе.
А что касается вопроса из [10], то наверное, по числу параметров различает. В некоторых СУБД вообще можно завести кучу ХП с одним названием, но разными типами или числом параметров.
Johnmen (2004-06-09 10:11:00) [5]А вот интересно, парсер+анализатор, видимо, "понимают" разницу между min-агр.ф-ей и min-UDF-ф-ей...
Sandman25 (2004-06-09 10:08:00) [6][8] Johnmen © (09.06.04 10:06)
Это другой min, c нсколькими параметрами. Min(1,2,3) = 1
Но если abs нет, то min уже не важен :)
Johnmen (2004-06-09 10:06:00) [7]>Sandman25 © (09.06.04 10:04) [6]
>Или Min и Abs тоже нет?
min/max - стандартизованные агрегатные ф-ии
abs - нет
Sandman25 (2004-06-09 10:04:00) [8]А так?
Sum(
Min(Abs(L.id1 - C.id), 1) +
Min(Abs(L.id2 - C.id), 1) +
...
)
Или Min и Abs тоже нет?
Sandman25 (2004-06-09 10:04:00) [9]Точнее
Sum(6 -
(Min(Abs(L.id1 - C.id), 1) +
Min(Abs(L.id2 - C.id), 1) +
...
)
)
Johnmen (2004-06-09 09:55:00) [10]>Sandman25 © (09.06.04 09:54) [3]
case в IB ?
:)
Соловьев (2004-06-09 09:55:00) [11]
> case when L.id6 = C.id then 1 else 0 end
в ИБ такого нет - это ФБ
> Cast(L.idi=C.id as Integer),
такое не прокатит
Sandman25 (2004-06-09 09:54:00) [12]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), то еще лучше :)
Соловьев (2004-06-09 09:14:00) [13]
> [1] Johnmen © (09.06.04 09:02)
а по остальным 5 столбцам? :)
Johnmen (2004-06-09 09:02:00) [14]
SELECT клиент, COUNT(*) FROM Table
GROUP BY клиент
ORDER BY 2 DESC
Первые 6 записей в НД - твои...:)