Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL,基于同一个表,多种分区类型_Sql_Postgresql_Join_Count_Sum - Fatal编程技术网

SQL,基于同一个表,多种分区类型

SQL,基于同一个表,多种分区类型,sql,postgresql,join,count,sum,Sql,Postgresql,Join,Count,Sum,我试图查询一个表,该表共享许多实体类型Ticket、TicketNote、TimeEntry、Resource等。。 当我运行多个内部联接时,计数总是返回相同的数据。 下面我设计的查询很有效,但这是最好的方式吗 选择 ticket.data->“TicketNumber”, ticket.data->“Title”, countcase输入时。name='TicketNote'然后1个结束注释, countcase当entry.name='TimeEntry'然后是1个结束时间, sumcase

我试图查询一个表,该表共享许多实体类型Ticket、TicketNote、TimeEntry、Resource等。。 当我运行多个内部联接时,计数总是返回相同的数据。 下面我设计的查询很有效,但这是最好的方式吗

选择 ticket.data->“TicketNumber”, ticket.data->“Title”, countcase输入时。name='TicketNote'然后1个结束注释, countcase当entry.name='TimeEntry'然后是1个结束时间, sumcase when entry.name='TimeEntry'然后entry.data->'HoursToBill'::numeric else 0 end hours\u to\u bill 从缓存票 内部联接缓存项 在entry.data->>“TicketID”上:numeric=ticket.aid和entry.name='TimeEntry'或entry.name='TicketNote' 哪里 ticket.name='ticket' 按票证分组。数据 按小时向账单说明订购; 我对SQL相当生疏

我欣赏任何智慧


谢谢大家!

我希望这样:

select ticket.data ->> 'TicketNumber' as ticketNumber,
       ticket.data ->> 'Title' as title,
       count(*) filter (where entry.name = 'TicketNote') as notes,
       count(*) filter (where entry.name = 'TimeEntry') as times,
       sum((entry.data ->> 'HoursToBill')::numeric) filter (where entry.name = 'TimeEntry') as hours_to_bill
from caches ticket inner join
     caches entry
     on (entry.data ->> 'TicketID')::numeric = ticket.aid and
        (entry.name = 'TimeEntry' or entry.name = 'TicketNote')
where ticket.name = 'Ticket'
group by ticketnumber, title
order by hours_to_bill desc;

这实际上只是对您的查询进行调整。它使用了更现代的过滤器语法,有时会更高效。它更明确地说明了聚合标准。

我希望这样:

select ticket.data ->> 'TicketNumber' as ticketNumber,
       ticket.data ->> 'Title' as title,
       count(*) filter (where entry.name = 'TicketNote') as notes,
       count(*) filter (where entry.name = 'TimeEntry') as times,
       sum((entry.data ->> 'HoursToBill')::numeric) filter (where entry.name = 'TimeEntry') as hours_to_bill
from caches ticket inner join
     caches entry
     on (entry.data ->> 'TicketID')::numeric = ticket.aid and
        (entry.name = 'TimeEntry' or entry.name = 'TicketNote')
where ticket.name = 'Ticket'
group by ticketnumber, title
order by hours_to_bill desc;

这实际上只是对您的查询进行调整。它使用了更现代的过滤器语法,有时会更高效。它更明确地说明了聚合标准。

这些->>是什么意思?方法调用?->>是一个jsonb操作符,将JSON对象字段设置为textOK,我明白了。谢谢那些->>是什么意思?方法调用?->>是一个jsonb操作符,将JSON对象字段设置为textOK,我明白了。非常感谢你!我完全不知道这种语法。我还将注意到您是如何修复我的空白格式的。非常感谢!我完全不知道这种语法。我还将注意到您是如何修复我的空白格式的。