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

Вниз

MySQL   Найти похожие ветки 

 
AL2002 ©   (2002-11-22 16:00) [0]

Нужно вывести десять записей из MySQL-таблицы.
Как это сделать?


Подробнее:
Вывести нужно десять записей, в каковых значения повторяются максимальное количество раз. Это можно одним запросом сделать?


 
Anatoly Podgoretsky ©   (2002-11-22 16:05) [1]

Переведи


 
AL2002 ©   (2002-11-22 16:15) [2]


> Anatoly Podgoretsky © (22.11.02 16:05)
> Переведи

Ну, вот в таблице есть столбик 123. И в нем много записей, но они повторяются. Т.е. уникальных там, скажем, двадцать только.
"абв", "где", "жзи"...

Нужно создать топ10 этих записей. Т.е. вывести самые повторяющиеся.
Вот.


 
Wonder ©   (2002-11-22 16:23) [3]

А MySQL какой версии?


 
AL2002 ©   (2002-11-22 16:34) [4]


> Wonder © (22.11.02 16:23)
> А MySQL какой версии?

А я гребу?..
Это надо инфо выводить из строки, а облом.


Да какая разница, там нужно что-то в духе Select abc, count тра-ля-ля, from table1, group by abc и чего-то там ещё.

Вот. Вариант просто вывести количества по каждому уникальному значению, потом эти количества добавить в массив, потом сортировать массив. Я хотел бы одним запросом это сделать.


 
Wonder ©   (2002-11-22 16:54) [5]

Я к тому спросил, что кто-то когда-то обещал, что в MySQL наконец-то будут вложенные запросы...


 
sonja ©   (2002-11-22 17:06) [6]

У меня имеется таблица юзеров users, в которой имена юзеров повторяются, а пасворды нет.
Чтобы посмотреть у кого из юзеров больше всего пасвордов (выбрать 10 юзеров), я написала следующий запрос:

select *, count(login) as count from users
group by login
order by count desc limit 10


Возможно, это то что тебе нужно.
З.Ы. Правда к таблице подцепляется в этом случае еще один столбец.


 
AL2002 ©   (2002-11-22 17:07) [7]


> Wonder © (22.11.02 16:54)
> Я к тому спросил, что кто-то когда-то обещал, что в MySQL
> наконец-то будут вложенные запросы...

А ну дадно тогда. Буду старым способом делать, несколькими запросами.


 
Дремучий ©   (2002-11-22 17:25) [8]


> AL2002 c

делаешь топпинг? прямо мои вопроосы дублируешь.... :)))
правда я топ пока не делаю, а спрашивал из чистого интереса
эта темка уже ушла архив....

Задачка по SQL...

Дремучий c (29.10.02 22:28)
Есть таблица, которая состоит из одного столбика целых чисел. Числа могут повторятся.
1)Написать запрос который находит число(а) которое повторяется максимальное количество раз.
2)Написать запрос который находит три(возможно реальных чисел будет больше) числа которые повторяются наибольшее количество раз.

Использовать стандартный СКЛ. Сразу скажу - у меня пока решения нет.... :))

-----------------------------------------------------------------
VictorT c (29.10.02 22:36)
group by тебе поможет.

select distinct count(field1) as cnt1, field1
from table1 group by field1 into table2;
select field1
from table2 where cnt1 = select max(cnt1) from table2;

Вроде так.
-----------------------------------------------------------------
Andrew M. (30.10.02 07:04)
select count(field1), field1
from table1
group by field1
order by 1 desc;

Затем читаешь столько записей, сколько надо
-----------------------------------------------------------------
Cu c (30.10.02 09:34)
вот - проверила -работает
только это транзакт-SQL не знаю какой тебе надо
первый вопрос
select max (cnt) from
(
select distinct count (Quantity) cnt, Quantity from Table1 where Quantity in
(
select distinct Quantity from Table1
)
Group by Quantity
) Q
второй вопрос
select top 3 cnt from
(
select distinct count (Quantity) cnt, Quantity from Table1 where Quantity in
(
select distinct Quantity from Table1
)
Group by Quantity
) Q order by cnt desc

-----------------------------------------------------------------
Рыжик c (30.10.02 10:22)
1)
select a.FieldValue, a.CountValue
from
(select max(CountValue) from
(select count(Field1) from Table1 group by value
) as a(CountValue)
) as b(MaxValue),
(select count(Field1),Field1 from Table1 group by value
) as a(CountValue,FieldValue)
where a.CountValue=b.MaxValue

2)
select a.FieldValue, a.CountValue
from
(select top 3 count(Field1) from Table1 group by Field1 order by count(Field1) desc
) as b(MaxValue),
(select count(Field1), Field1 from Table1 group by Field1
) as a(CountValue, FieldValue)
where a.CountValue=b.MaxValue
order by a.CountValue desc

Первое можно также сделать из второго заменой 3 на 1.
Рыжик c (30.10.02 10:28)
Имелось в виду "group by Field1" вместо "group by value"


 
Дремучий ©   (2002-11-22 17:27) [9]

-----------------------------------------------------------------
Андрей Прокофьев c (31.10.02 16:51)
А вот так:
SELECT [TOP 3] COUNT(Field1) AS Expr1, Field1 AS Expr2
FROM Table
GROUP BY Field1
ORDER BY -COUNT(Field1)
-----------------------------------------------------------------
А вот оказывается, что бывают запросы, работающие в локальном SQL и не работающие в транзакте.
Вот пример:
select distinct count(c.q) from qt as c
where not exists
(select count(d.q) from qt as d
group by d.q
having count(d.q)>(select count(*) from qt as e where e.q=c.q)
and
count(d.q)<
(select distinct count(e.q) from qt as e
where not exists
(select count(f.q) from qt as f
group by f.q
having count(f.q)>(select count(*) from qt as g where g.q=e.q)
)
group by e.q
)
)
group by c.q
В локальном работает, а в транзакте (SQLServer) помогает только замена count(d.q)< на count(d.q)< all. Причём с all работает в транзакте, и не работает на локальном.
Так что с переносимостью тоже есть проблемы.
Только не понятно, почему так. Вроде бы Transact-SQL > Standard SQL > Local SQL, поэтому то, что работает в локальном, должно работать и в транзакте. А вот нет.
-----------------------------------------------------------------
Рыжик c (01.11.02 13:21)
Ну вот и вторая задача.

Наиболее приемлемое для практического воплощения решение из всех, что пришли мне в голову.

level1 Выбираем лидеров (это решение первой задачи)

select count(q) cnt, q
from qt as t1
where not exists
(
select count(q)
from qt
group by q
having count(q) > (select count(*) from qt where q=t1.q)
)
group by q
order by cnt desc

level2 Первое и второе места

select count(q) cnt, q
from qt as t2
where not exists
(
select count(q)
from qt
group by q
having count(q) > (select count(*) from qt where q=t2.q)
and count(q) not in
--level1
(
select count(q)
from qt as t1
where not exists
(select count(q)
from qt
group by q
having count(q) > (select count(*) from qt where q=t1.q)
)
group by q
)
)
group by q
order by cnt desc

level3 Тройка лидеров

select count(q) cnt, q
from qt as t3
where not exists
(
select count(q)
from qt
group by q
having count(q) > (select count(*) from qt where q=t3.q)
and count(q) not in
--level2
(
select count(q)
from qt as t2
where not exists
(
select count(q)
from qt
group by q
having count(q) > (select count(*) from qt where q=t2.q)
and count(q) not in
--level1
(
select count(q)
from qt as t1
where not exists
(select count(q)
from qt
group by q
having count(q) > (select count(*) from qt where q=t1.q)
)
group by q
)
)
group by q
)
)
group by q
order by cnt desc

Можно продолжать и дальше.

Смысл этих запросов такой:"выбираем такие числа, для которых количество повторений либо принадлежит множеству количеств повторений, найденных на предыдущем уровне, либо является максимальным в дополнении к этому множеству".
-----------------------------------------------------------------
Дремучий c (01.11.02 13:35)
>>Рыжик c
БРАВО! Молодчина!!!:))

мда...
сколько интересного можно для себя извлечь из простенькой задачки
и заодно буду знать к кому за помощью обращаться, если проблемы с написанием скриптов будут... ;)
-----------------------------------------------------------------




 
Дремучий ©   (2002-11-22 17:33) [10]

мне решения Рыжика понравились больше всего
разве не красиво?

select count(q) cnt, q
from qt as t1
where not exists
(
select count(q)
from qt
group by q
having count(q) > (select count(*) from qt where q=t1.q)
)
group by q
order by cnt desc



 
AL2002 ©   (2002-11-22 17:33) [11]


> sonja © (22.11.02 17:06)
>З.Ы. Правда к таблице подцепляется в этом случае еще один
>столбец.

Ага! Пасиба. Попробую.


 
asafr ©   (2002-11-22 17:35) [12]

А почему это все в конференции "Потрепаться"? Для этого же есть конференция БД


 
AL2002 ©   (2002-11-22 17:39) [13]


> asafr © (22.11.02 17:35)
> А почему это все в конференции "Потрепаться"? Для этого
> же есть конференция БД

А это не дельфи. Это супер-пупер-новороченный форум с базой майсиквел.

Посмотреть можно здесь (реклама, блин):
http://www.adelavida.con.ua/Forums/


 
Дремучий ©   (2002-11-22 17:40) [14]

>>asafr © (22.11.02 17:35)
имхо, туда реже заходят....



 
Wonder ©   (2002-11-22 17:40) [15]

>AL2002

"The requested URL could not be retrieved"

Да уж. Реклама. БЛИН! :)))


 
AL2002 ©   (2002-11-22 17:46) [16]


> Wonder © (22.11.02 17:40)
> >AL2002
>
> "The requested URL could not be retrieved"
>
> Да уж. Реклама. БЛИН! :)))

Он ещё не везде прописан. Домен только недавно заработал.


 
AL2002 ©   (2002-11-22 18:00) [17]


> sonja © (22.11.02 17:06)

Сонька, что-то оно нифига не хотит выводить. Ругается, падлина.

Низя, наверное. :(


 
AL2002 ©   (2002-11-22 18:36) [18]

Сделал присваивание кол. записей в массив с последующей сортировкой массива. Ну их в жопу, вложенные запросы эти. И транзакции туда же.



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

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

Наверх




Память: 0.52 MB
Время: 0.018 c
1-36080
Tyo
2002-11-29 21:04
2002.12.12
Возможна ли передача коннекта в COM объект?


3-36022
keymaster
2002-11-25 09:30
2002.12.12
Посоветуйте умную книжку


4-36481
Vanger_
2002-10-31 10:53
2002.12.12
Работа с другим приложением


1-36288
smok_er
2002-12-01 00:52
2002.12.12
Auto-increment build number


4-36479
BSD
2002-10-31 10:07
2002.12.12
Размер стека потока