Задавайте вопросы, мы ответим
Вы не зашли.
Подскажите. Как выбрать количество строк в % от общего количества строк.
К примеру:
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 вставить в другую таблицу (применяется в процедуре).
спасибо)
Неактивен
Почему вы не хотите решить задачу в несколько запросов - посчитать кол-во строк в таблице count(*), округлить 30% до целого числа и выбрать по limit?
Можно попробовать решить задачу в один запрос, но это будет жуткое извращение.
Неактивен
Потому что есть такая штука как оптимизация запросов и чем решение проще тем оно быстрее и надежнее, и соответственно выполнение кода не будет насиловать сервер своими обращениями и манипуляциями в тот момент когда к базе обращено несколько сотен человек. По логике вещей в MySQL должна быть предусмотрена выборка на подобии Limit но в процентом соотношени. В Microsoft SQL Server такая выборка предусмотрена название не помню начинается с буквы Т.... и пишется все в одну строку, но вот в MySQL к сожалеию не работает ...
Неактивен
ivan27 написал:
Потому что есть такая штука как оптимизация запросов и чем решение проще тем оно быстрее и надежнее, и соответственно выполнение кода не будет насиловать сервер своими обращениями и манипуляциями в тот момент когда к базе обращено несколько сотен человек.
Проще и одним запросом - разные понятия (в данном случае проще и быстрее будут несколько простых запросов).
Одним запросом лучше не делать (см до конца http://sqlinfo.ru/forum/viewtopic.php?id=1742 )
ivan27 написал:
По логике вещей в MySQL должна быть предусмотрена выборка на подобии Limit но в процентом соотношени. В Microsoft SQL Server такая выборка предусмотрена название не помню начинается с буквы Т.... и пишется все в одну строку, но вот в MySQL к сожалеию не работает ...
В MySQL такой штуки нет.
Неактивен
Вот одно из решений в "один присест", подсказал сотрудник компании в кот я работаю:
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% от общего количества строк). Все проверял, просчитывал - работает, но хотелось бы услышать ваше мнение.
Неактивен
а вот еще - можно дополнить Limit'ом и выбирать строки в процентном соотношении не с '0' а к примеру с '10' го положения значения - т.е. выборку немного сместить ниже.
Отредактированно ivan27 (18.09.2013 16:13:39)
Неактивен
Хорошее решение, в смысле красивое. А вот с точки зрения производительности жуткое извращение, которое дважды делает полный скан, сначала копируя таблицу во временнную, а потом сканируя временную.
Неактивен
предложите свое, очень интересно рассмотреть)
Неактивен
vasya написал:
Почему вы не хотите решить задачу в несколько запросов - посчитать кол-во строк в таблице count(*), округлить 30% до целого числа и выбрать по limit?
Неактивен
спасибо, попробую.
Неактивен