我试图限制用于在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子句之前已经发生一样。
有什么想法吗?
答案 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;