sql - 小计行的索引?

标签 sql postgresql

我正在尝试在 Sql 上实现以下目标,即通过在查询中创建随机列(如索引)来对查询进行排序,这听起来很简单,但我无法弄清楚如何为每一行提供我想要的位置,去展示我的问题。

到目前为止我完成的是这样的:

我通过在那时执行子查询和联合来做到这一点,但现在我想创建一个列(如索引)来按我想要的方式对我的表进行排序,但我不知道如果有人能帮助我的话该怎么做:

如何创建一个索引列并在最后按照您想要的顺序为该列的每一行赋予您想要的值?


乔纳森

    Bananas 10
     Orange  6
     Potato  2  


乔安娜

     Bananas 3
     Orange  1
     Juice   3


标记

     Potato  5
     Peanuts 7 


路易吉

     Potato  10
     Orange  10


小计 12
小计18
小计20
小计 7
...
...

输出期望值
ColumnA ColumnB ColumnC

乔纳森

香蕉 10
橙色6
马铃薯2
小计 18
乔安娜橙1
果汁3
小计 4
马克
花生5
土 bean 7
小计 12
路易吉
马铃薯 10
橙10
小计 20

Input/OutPut/IdeaToAchieveOutput

最佳答案

您可以通过以下方式执行此操作:

表格

create table ex1 (
  person text,
  food text,
  amount int
);

数据

insert into ex1 values
('Jonathan', 'Bananas', 10),
('Jonathan', 'Orange', 6),
('Jonathan', 'Potato', 2),
('Joana', 'Bananas', 3),
('Joana', 'Orange', 1),
('Joana', 'Juice', 3),
('Mark', 'Potato', 5),
('Mark', 'Peanuts', 7),
('Luigi', 'Potato', 10),
('Luigi', 'Orange', 10);

查询

with subtotals as (
    select person, sum(amount) as subtotal
    from ex1 group by person
),
combined as (
    select person, food, amount from ex1
    union all
    select person, 'Subtotal' as food, subtotal as amount from subtotals
)
select * from combined order by person, food;

输出

  person  |   food   | amount
----------+----------+--------
 Joana    | Bananas  |      3
 Joana    | Juice    |      3
 Joana    | Orange   |      1
 Joana    | Subtotal |      7
 Jonathan | Bananas  |     10
 Jonathan | Orange   |      6
 Jonathan | Potato   |      2
 Jonathan | Subtotal |     18
 Luigi    | Orange   |     10
 Luigi    | Potato   |     10
 Luigi    | Subtotal |     20
 Mark     | Peanuts  |      7
 Mark     | Potato   |      5
 Mark     | Subtotal |     12

希望这能让你得到你想要的。只要您没有按字母顺序排列高于小计的食物,此方法就有效。如果这样做,您可以将查询更改为使用单词 ZZ-Subtotal-ZZ 或类似的东西,以显示在一个人的食物 list 的末尾。

工作示例在这里:https://rextester.com/VGO98471

关于sql - 小计行的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55697495/

相关文章:

python - Django MySql,外键查询

Javascript Promise Chaining - 它被接受了吗?

sql - Bash 脚本和 PostgreSQL : How to access column values returned from SELECT statement

PostgreSQL 创建一个新列,其值以其他列为条件

mysql - PostgreSQL 中的排序 : strings with parenthesis

java - DBMS_RANDOM 似乎不起作用

java - Eclipse(Mule ESB)错误: java. sql.SQLException:尝试加载驱动程序时出错

c# - 使用 Razor 从表中获取行信息

MySQL:多个表的注释

sql - min() 改进