PostgreSQL实现FizzBuzz:编写查询输出1-1000的对应序列
PostgreSQL实现1到1000的FizzBuzz序列查询
你的伪代码中文翻译:
SELECT CASE WHEN (1到1000之间的数)% 3 = 0 THEN "Fizz", WHEN (1到1000之间的数)% 5 = 0 THEN "Buzz", WHEN (1到1000之间的数)% 5 = 0 AND (1到1000之间的数)% 3 = 0 THEN "FizzBuzz", END
伪代码存在的问题:
- 缺少生成1到1000连续数字的逻辑,PostgreSQL需要用
generate_series函数生成序列 - CASE条件顺序错误:必须先判断同时是3和5的倍数(15的倍数),否则会被前面的3或5的倍数条件提前匹配,导致
FizzBuzz永远不会输出 - 语法错误:CASE分支间不能加逗号;字符串常量需用单引号(双引号在PostgreSQL中用于标识符);第三个WHEN里重复使用WHEN关键字,应改为AND连接条件;缺少ELSE分支输出非3/5倍数的原数字
正确的查询语句:
SELECT CASE WHEN num % 15 = 0 THEN 'FizzBuzz' WHEN num % 3 = 0 THEN 'Fizz' WHEN num % 5 = 0 THEN 'Buzz' ELSE num::TEXT END AS result FROM generate_series(1, 1000) AS nums(num);
代码说明:
generate_series(1, 1000):生成从1到1000的连续整数序列,通过AS nums(num)给序列列命名为num- CASE分支顺序:优先判断15的倍数,避免被3或5的条件覆盖
ELSE num::TEXT:将原数字转为字符串类型,确保所有输出结果的类型一致AS result:为输出列指定别名,让结果集更易读
内容的提问来源于stack exchange,提问作者Felipe Felix
相关产品推荐
相关产品推荐

