В MySQL установлено что-то похожее на LIMIT в процентах - PullRequest
1 голос
/ 25 марта 2010

Я использую функцию поиска, но я думаю, что нет никакого связанного вопроса с решением для моего вопроса (мои извинения, если я ошибаюсь).

Давайте представим, что у нас есть простая таблица в MySQL с этой очень простой схемой: (MATERIAL varchar (10) первичный ключ, QUANTITY smallint). И с такими строками, как: (A, 10), (B, 8), (C, 7), (D, 4), (E, 1), (F, 1), (G, 1). Таким образом, у нас есть 7 материалов с общим количеством 32 предметов.

То, что я хотел бы получить, это запрос SELECT, чтобы получить только 2 первых материала (упорядоченные по количеству), но НЕ потому, что я знаю, что хочу ровно 2, а потому, что я знаю, что я хочу N материалов, необходимых для получения 50% покрытия по количеству.

Итак, с материалом А я получаю 10/32, и этого недостаточно. С материалом B я получаю 18/32, и, поскольку это более 50%, этого достаточно.

В неправильном синтаксисе, просто чтобы быть более понятным, я бы хотел что-то вроде:

ВЫБРАТЬ материал ИЗ вкладки ЗАКАЗАТЬ по количеству DESC LIMIT 50% от количества;

У вас есть идеи, как я мог бы реализовать это с помощью одного запроса?

1 Ответ

2 голосов
/ 25 марта 2010

Нет, но вы можете эмулировать его, используя переменные сеанса:

SELECT  material
FROM    (
        SELECT  material, @r := @r + 1 AS rn,
                (
                SELECT  COUNT(*)
                FROM    tab
                ) AS cnt
        FROM    (
                SELECT  @r := 0
                ) vars,
                tab
        ORDER BY
                quantity DESC
        ) q
WHERE   rn < cnt DIV 2
...