限制MYSQL查询计算的行

时间:2013-06-05 07:16:11

标签: php mysql sql

我试图限制用于在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 个答案:

答案 0 :(得分: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

UPDATE:限制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 

答案 1 :(得分: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 Fiddle

答案 2 :(得分: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

答案 3 :(得分:0)

SELECT    SUM(`position`)/COUNT(`id`) AS `avg` 
FROM      (SELECT postion,id from rankings_04_06_13  
WHERE     site_id = '7' 
ORDER BY  `position` ASC LIMIT 4) AS subquery;