SQL,基于同一个表,多种分区类型
我试图查询一个表,该表共享许多实体类型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相当生疏 我欣赏任何智慧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
谢谢大家! 我希望这样:
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,我明白了。非常感谢你!我完全不知道这种语法。我还将注意到您是如何修复我的空白格式的。非常感谢!我完全不知道这种语法。我还将注意到您是如何修复我的空白格式的。