SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.09.2013 16:53:09

ivan27
Участник
Зарегистрирован: 16.09.2013
Сообщений: 6

Выборка строк в процентах

Подскажите. Как выбрать количество строк в % от общего количества строк.

К примеру:

1) существует таблица table_name as t c полями: t.1, t.2, t.3

2) в запросе select * from table_name as t выводит 500 строк

3) необходимо вывести 30% строк от 500 и условие желательно указать не selecte a в where, поскольку процентную выборку строк намереваюсь через insert into вставить в другую таблицу (применяется в процедуре).

спасибо)

Неактивен

 

#2 16.09.2013 17:44:02

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка строк в процентах

Почему вы не хотите решить задачу в несколько запросов - посчитать кол-во строк в таблице count(*), округлить 30% до целого числа и выбрать по limit?
Можно попробовать решить задачу в один запрос, но это будет жуткое извращение.

Неактивен

 

#3 17.09.2013 09:28:26

ivan27
Участник
Зарегистрирован: 16.09.2013
Сообщений: 6

Re: Выборка строк в процентах

Потому что есть такая штука как оптимизация запросов и чем решение проще тем оно быстрее и надежнее, и соответственно выполнение кода не будет насиловать сервер своими обращениями и манипуляциями в тот момент когда к базе обращено несколько сотен человек. По логике вещей в MySQL должна быть предусмотрена выборка на подобии Limit но в процентом соотношени. В Microsoft SQL Server такая выборка предусмотрена название не помню начинается с буквы Т.... и пишется все в одну строку, но вот в MySQL к сожалеию не работает ...

Неактивен

 

#4 17.09.2013 09:40:49

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка строк в процентах

ivan27 написал:

Потому что есть такая штука как оптимизация запросов и чем решение проще тем оно быстрее и надежнее, и соответственно выполнение кода не будет насиловать сервер своими обращениями и манипуляциями в тот момент когда к базе обращено несколько сотен человек.

Проще и одним запросом - разные понятия (в данном случае проще и быстрее будут несколько простых запросов).
Одним запросом лучше не делать (см до конца http://sqlinfo.ru/forum/viewtopic.php?id=1742 )

ivan27 написал:

По логике вещей в MySQL должна быть предусмотрена выборка на подобии Limit но в процентом соотношени. В Microsoft SQL Server такая выборка предусмотрена название не помню начинается с буквы Т.... и пишется все в одну строку, но вот в MySQL к сожалеию не работает ...

В MySQL такой штуки нет.

Неактивен

 

#5 17.09.2013 09:54:34

ivan27
Участник
Зарегистрирован: 16.09.2013
Сообщений: 6

Re: Выборка строк в процентах

Вот одно из решений в "один присест", подсказал сотрудник компании в кот я работаю:

SELECT * FROM (SELECT  @counter:= @counter +1 as 'percent'
                       FROM table_name, (select @counter:=0) initvar) as tn
WHERE percent <= (10/100 * @counter) -- в первой части дроби устанавливаем необходимый процент в диапазоне от 0 до 100 % (в нашем примере указано 10% от общего количества строк). Все проверял, просчитывал - работает, но хотелось бы услышать ваше мнение.

Неактивен

 

#6 17.09.2013 12:31:12

ivan27
Участник
Зарегистрирован: 16.09.2013
Сообщений: 6

Re: Выборка строк в процентах

а вот еще - можно дополнить Limit'ом и выбирать строки в процентном соотношении не с '0' а к примеру с '10' го положения значения - т.е. выборку немного сместить ниже.

SELECT * FROM (SELECT  @counter:= @counter +1 as 'percent'  FROM table_name, (select @counter:=0) initvar) tn WHERE percent <= (20/100 * @counter) LIMIT 10, 10000000;

Отредактированно ivan27 (18.09.2013 16:13:39)

Неактивен

 

#7 17.09.2013 16:19:29

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка строк в процентах

Хорошее решение, в смысле красивое. А вот с точки зрения производительности жуткое извращение, которое дважды делает полный скан, сначала копируя таблицу во временнную, а потом сканируя временную.

Неактивен

 

#8 17.09.2013 17:56:17

ivan27
Участник
Зарегистрирован: 16.09.2013
Сообщений: 6

Re: Выборка строк в процентах

предложите свое, очень интересно рассмотреть)

Неактивен

 

#9 17.09.2013 19:40:48

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка строк в процентах

vasya написал:

Почему вы не хотите решить задачу в несколько запросов - посчитать кол-во строк в таблице count(*), округлить 30% до целого числа и выбрать по limit?

Неактивен

 

#10 18.09.2013 14:07:20

ivan27
Участник
Зарегистрирован: 16.09.2013
Сообщений: 6

Re: Выборка строк в процентах

спасибо, попробую.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson