1

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 句に到達する前に計算が既に行われているようです。

何か案は?

4

4 に答える 4

1

これを試してください(@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 
于 2013-06-05T07:30:59.400 に答える
1

派生テーブルを使用した例を次に示します。制限をどのように適用するかによって、探しているものになる可能性があります (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

SQL フィドル

于 2013-06-05T07:31:37.477 に答える
0

これを試して

 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
于 2013-06-05T07:31:28.440 に答える