Доступ к двум строкам на основе одного столбца, а также доступ к другим столбцам для этих строк - PullRequest
0 голосов
/ 12 июня 2018

У меня есть таблица с весом столбцов, ростом, коленом, датой, идентификатором. Я хотел найти две строки в одной таблице: первая строка - min (вес), а другая - max (вес).Как мне также получить доступ к датам и идентификаторам для этих двух строк, хотя все находится в одной таблице.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

union all приходит на ум:

(select t.*
 from t
 order by weight asc
 limit 1
) union all
(select t.*
 from t
 order by weight desc
 limit 1
);

Это должно быть довольно оптимально с точки зрения производительности, если у вас есть индекс на weight.

Это гарантирует ровно две строки внабор результатов, даже если есть связи.

0 голосов
/ 12 июня 2018

Попробуйте найти минимальный и максимальный вес:

SELECT *
FROM yourTable
WHERE
    weight = (SELECT MIN(weight) FROM yourTable) OR
    weight = (SELECT MAX(weight) FROM yourTable);

Обратите внимание, что если для минимального / максимального веса связано более одной записи, то приведенный выше запрос может дать более 2 записей.Если возможны связи, то вы должны предоставить логику того, как с этим справиться.

Если вы используете MySQL 8 или более позднюю версию и имеете доступ к ROW_NUMBER, то здесь есть простое решение:

SELECT *
FROM
(
    SELECT *,
        ROW_NUMBER() OVER (ORDER BY weight) rn1,
        ROW_NUMBER() OVER (ORDER BY weight DESC) rn2
    FROM yourTable
) t
WHERE 1 IN (rn1, rn2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...