我想知道是否可以在LIMIT中使用子查詢。LIMIT中的MYSQL子查詢
我想使用這個的原因是返回最佳購買客戶的20%(1/5)。
例如(儘管這顯然不工作):
SELECT id, revenue
FROM customers
ORDER BY revenue DESC
LIMIT (SELECT (COUNT(*)/5) FROM customer)
有沒有一種方法,使在一個限制的子查詢,或以不同的方式回報20%?
我想知道是否可以在LIMIT中使用子查詢。LIMIT中的MYSQL子查詢
我想使用這個的原因是返回最佳購買客戶的20%(1/5)。
例如(儘管這顯然不工作):
SELECT id, revenue
FROM customers
ORDER BY revenue DESC
LIMIT (SELECT (COUNT(*)/5) FROM customer)
有沒有一種方法,使在一個限制的子查詢,或以不同的方式回報20%?
這樣使用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是少數幾個不支持窗口函數的數據庫之一。您可以使用變量:
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://計算器。 com/questions/4741239/select-top-x-or-bottom-percent-for-numeric-values-in-mysql –
請用你正在使用的數據庫標記你的問題。 –