0

'select count' クエリの増分値を実行したい (by 5)

これらの SQL クエリのように:

SELECT COUNT(*) FROM ages WHERE ages.year BETWEEN 1990 and 1995
SELECT COUNT(*) FROM ages WHERE ages.year BETWEEN 1995 and 2000
..so fort and so on..

どうすれば効率的な単一のクエリにすることができますか?

4

1 に答える 1

0
SELECT COUNT(*) AS `count`, (ages.year DIV 5) * 5 AS bottom, 
    (ages.year DIV 5 + 1) * 5 AS top
FROM ages
GROUP BY (ages.year DIV 5) * 5, (ages.year DIV 5 + 1) * 5

SQL フィドルの例

これは、実際には境界でこれらの値を二重にカウントしたくないことを前提としていることに注意してください。元のクエリと完全に同じではありません。本当にダブルカウントしたい場合は、次を試してください。

SELECT SUM(`count`) AS `count`, bottom, top
FROM
(
    SELECT COUNT(*) AS `count`, (ages.year DIV 5) * 5 AS bottom, 
        (ages.year DIV 5 + 1) * 5 AS top
    FROM ages
    GROUP BY (ages.year DIV 5) * 5, (ages.year DIV 5 + 1) * 5
    UNION ALL
    SELECT 1 AS `count`, ages.year - 5 AS bottom, ages.year AS top
    FROM ages
    WHERE MOD(ages.year, 5) = 0
) inclusive
GROUP BY bottom, top

SQL フィドルの例

于 2013-01-26T11:22:23.510 に答える