postgresql Postgres茎和叶图

djmepvbi  于 2023-05-06  发布在  PostgreSQL
关注(0)|答案(1)|浏览(158)

尝试在Postgres中创建茎和叶图。
“茎”是10的数字,“叶”是右边剩余的数字。实际用例有100和1000,但保持简单。
基于以下数据集,这是预期结果:
| 运行计数|茎|叶|
| --------------|--------------|--------------|
| 三|1|六七七|
| 十三|二|2223466778|
| 三十|三|00012334555666677|
| 三十九|四个|123356678|
| 四十|五|六|
我被难倒了,尤其是在“叶子”部分。这是我在完全空白之前能走多远:
stem = LEFT(Random_Data, 1)
还不够远!
谢谢你帮助我。通常我会走得更远并发布代码,为没有更多的工作而道歉。
样本数据:
| 随机数据|
| --------------|
| 十七岁|
| 三十一|
| 三十|
| 二十二|
| 二十三|
| 二十四|
| 三十|
| 三十三|
| 二十二|
| 十六岁|
| 四十|
| 三十八|
| 三十七|
| 三十六|
| 三十五|
| 三十四|
| 三十三|
| 三十二|
| 三十一|
| 四十八|
| 四十一|
| 三十五|
| 三十六|
| 三十七|
| 二十六|
| 三十六|
| 四十六|
| 三十五|
| 四十七|
| 三十五|
| 三十四|
| 三十六|
| 四十二|
| 四十三|
| 三十六|
| 五十六|
| 三十二|
| 四十六|
| 三十|

8oomwypt

8oomwypt1#

除非我遗漏了什么,否则您的输入数据与输出结果不匹配。
我会尽可能地坚持使用整数运算,只在必要时才转换为文本。这意味着应用整数除法(/)和模数(%)来获得茎和单个叶的值。
然后我会应用一个窗口函数来得到你的运行总数。

with leaf_stem as (
  select random_data / 10 as stem,
         string_agg(
           (random_data % 10)::text, 
           '' 
           order by random_data % 10
         ) as leaf
    from sample
   group by stem
)
select sum(length(leaf)) over (order by stem) as running_count,
       stem, leaf
  from leaf_stem
 order by stem;

工作小提琴。

相关问题