ANSI SQLを使用してこれを行うの典型的な方法は、ウィンドウ関数である:
SELECT id, revenue
FROM (SELECT c.*,
ROW_NUMBER() OVER (ORDER BY revenue DESC) as seqnum,
COUNT(*) OVER() as cnt
FROM customers
) c
WHERE seqnum <= cnt * 0.2
ORDER BY revenue DESC;
ほとんどのデータベースには、これらの機能をサポートしています。
MySQLは、ウィンドウ機能をサポートしていない数少ないデータベースの1つです。あなたは、変数を使用することができます。
SELECT id, revenue
FROM (SELECT c.*, (@rn := @rn + 1) as rn
FROM customers c CROSS JOIN
(SELECT @rn := 0) params
ORDER BY c.revenue DESC
) c
WHERE rn <= @rn/5; -- The subquery runs first so @rn should have the total count here.
http://stackoverflow.com/questions/4741239/select-top-x-or-bottom-percent-for-numeric-values-in-mysqlます。http:// stackoverflowの。 com/questions/4741239/select-top-x-or-bottom-percent-for-numeric-values-in-mysql –
ご使用のデータベースに質問にタグを付けてください。 –