0

可能重复:
生成一系列日期

在mysql中生成给定范围内的一系列数字的最佳方法是什么?

我想到的应用程序是编写一个报告查询,它为每个数字返回一行,而不管是否有任何数据要报告。最简单形式的示例可能是:

SELECT numbers.num, COUNT(answers.id)
FROM <series of numbers between X and Y> numbers
     LEFT JOIN answers ON answers.selection_number = numbers.num
GROUP BY 1

我曾尝试创建一个包含大量数字的表格,但这似乎是一个糟糕的解决方法。

4

2 回答 2

2

首先,创建一个名为 ints 的表,其中包含从 0 到 9 的每个数字的一​​条记录。

CREATE TABLE ints ( i tinyint );

然后用数据填充该表。

INSERT INTO ints VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);

现在您可以使用如下查询来生成数字序列。

SELECT generator.num, COUNT(answers.id)
FROM (
    SELECT a.i*10 + b.i AS num
    FROM ints a, ints b
    ORDER BY 1
) generator
LEFT JOIN answers ON answers.selection_number = generator.num
WHERE generator.num BETWEEN 18 AND 43

要为生成的数字添加另一个位置值,只需添加更多 ints 表的连接并相应地调整计算。以下将生成三位数字:

SELECT generator.num, COUNT(answers.id)
FROM (
    SELECT a.i*100 + b.i*10 + c.i AS num
    FROM ints a, ints b, ints c
    ORDER BY 1
) generator
LEFT JOIN answers ON answers.selection_number = generator.num
WHERE generator.num BETWEEN 328 AND 643
于 2012-12-31T21:06:33.093 回答
0

您可以尝试 group by numbers.num 而不是 group by 1

SELECT numbers.num, COUNT(answers.id)
FROM numbers
     LEFT JOIN answers ON answers.selection_number = numbers.num
WHERE numbers.num between X and Y
GROUP BY numbers.num
于 2012-12-31T20:51:50.603 回答