SQL で計算を行うために使用される行の量を制限しようとしています。
SELECT SUM(`position`)/COUNT(`id`) AS `avg`
FROM rankings_04_06_13
WHERE site_id = '7'
ORDER BY `position` ASC
LIMIT 4
ただし、これを行っても答えは変わりません。LIMIT 句と ORDER BY 句に到達する前に計算が既に行われているようです。
何か案は?
これを試してください(@DekDekkuの提案のように):
SELECT
SUM(`position`)/COUNT(`id`) AS `avg`
FROM (
SELECT `position`,
`id`
FROM rankings_04_06_13
WHERE site_id = '7'
ORDER BY `position` ASC
LIMIT 4
) as tmp
更新:行の75%を制限するには、これを試すことができます(ただし、あまり効率的ではありません):
SET @c:=0;
SELECT
SUM(`position`)/COUNT(`id`) AS `avg`
FROM (
SELECT
`position`,
`id`,
@c:=@c+1,
MOD(@c,4) as m
FROM
rankings_04_06_13
WHERE
site_id = '7'
) as tmp
WHERE
m <> 3
派生テーブルを使用した例を次に示します。制限をどのように適用するかによって、探しているものになる可能性があります (group by position
最初の 4 行ではなく、最初の 4 つの位置を取得したい場合があります)。
SELECT SUM(`position`)/COUNT(`id`) AS `avg`
FROM (SELECT position, id
FROM rankings_04_06_13
WHERE site_id = '7'
ORDER BY `position` ASC
LIMIT 4
) AS AVRG
これを試して
SELECT SUM(`position`)/COUNT(`id`) AS `avg`
FROM (SELECT position,id from rankings_04_06_13
WHERE site_id = '7'
ORDER BY `position` ASC LIMIT 4) as t2