Как я могу показать несколько счетчиков в одном запросе SQL JOIN - PullRequest
0 голосов
/ 09 мая 2020

Я хотел бы вернуть таблицу, которая показывает «Имя клиента, Свойства (количество), Жильцов (количество), Разрешения» (количество). У каждого клиента есть свойства. У каждой собственности есть арендаторы, и у каждого арендатора есть разрешения. Я могу вернуть, сколько свойств на одного клиента.

select cli.Client_Name, count(prop.Client_ID ) as Properties
from profile_Client as CLI
  left join profile_property as Prop on CLI.id = prop.Client_ID 
group by cli.Client_Name
order by cli.Client_Name 

Но дальше я застрял. Не могу понять, как вернуть, сколько арендаторов на недвижимость и сколько разрешений на одного арендатора. В идеале таблица должна выглядеть так.

   Client   |   Properties   |   Tenants   |   Permits   |
Client 1    |212             |4023         |12203        |
Client 2    |162             |2032         |7203         |

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Пожалуйста, COUNT () OVER (РАЗДЕЛЕНИЕ ПО col1, col2, ORDER BY col1, col2). Вы не упомянули полную структуру таблицы, но вот пример того, как получить счет из вашего SQL для каждой иерархии.
SELECT * from ( select cli.Client_Name, count(*) OVER (PARTITION BY prop.Client_ID ORDER BY prop.Client_ID) as cnt_Properties, count(*) OVER (PARTITION BY prop.tenant_id, prop.Client_ID ORDER BY prop.tenant_id,prop.Client_ID) as cnt_Tenant, count(*) OVER (PARTITION BY Permits ,prop.tenant_id, prop.Client_ID ORDER BY Permits ,prop.tenant_id,prop.Client_ID) as cnt_Permits, row_number (*) OVER (PARTITION BY prop.Client_ID ORDER BY prop.Client_ID) as rn from profile_Client as CLI left join profile_property as Prop on CLI.id = prop.Client_ID )rs WHERE rs.rn=1 order by cli.Client_Name

0 голосов
/ 09 мая 2020

Самый простой подход в этой ситуации - объединить все таблицы и подсчитать отдельные идентификаторы:

select
  cli.client_name, 
  count(distinct prop.property_id) as properties,
  count(distinct ten.tenant_id) as tenants,
  count(distinct perm.permit_id) as permits
from profile_client as cli
left join profile_property prop on cli.id = prop.client_id
left join profile_tenant ten on ten.property_id = prop.property_id
left join profile_permit perm on perm.tenant_id = ten.tenant_id
group by cli.client_name
order by cli.client_name;
...