Как объединить 2 запроса в Postgresql?
Я столкнулся с проблемой, у меня есть 2 селекта и мне нужно объединить их в один вывод? Я хочу получить одну таблицу select с колонкой shop.name, COUNT("Fins_shop". "name") as count_goods MAX("Fins_price". "price") as max_price, Count("Fins_shop". "name") as count_department, SUM("Fins_department". "staff_amount"),
first select
SELECT
"Fins_shop"."name",
COUNT("Fins_shop"."name") as count_goods
MAX("Fins_price"."price") as max_price
FROM "Fins_shop"
INNER JOIN "Fins_department"
ON "Fins_department"."shop_id" = "Fins_shop"."id"
INNER JOIN "Fins_item"
ON "Fins_item"."department_id" = "Fins_department"."id"
GROUP BY "Fins_shop"."name"
второй выбор
SELECT
"Fins_shop"."name" ,
Count("Fins_shop"."name") as count_department,
SUM("Fins_department"."staff_amount"),
FROM "Fins_shop"
INNER JOIN "Fins_department"
ON "Fins_department"."shop_id" = "Fins_shop"."id"
GROUP BY "Fins_shop"."name"
если таблица table имеет внешний ключ к department и таблица department имеет внешний ключ к shop
Также есть модели этих таблиц:
class Shop(models.Model):
name = models.CharField(max_length=200)
address = models.CharField(max_length=200)
staff_amount = models.PositiveIntegerField(default=0)
def __str__(self):
return f'{self.id}{self.name} with staff {self.staff_amount}'
class Meta:
verbose_name = 'Shop'
verbose_name_plural = 'Shops'
ordering = ['id']
def get_absolute_url(self):
return reverse('shop_detail', kwargs={'pk': self.pk})
class Department(models.Model):
sphere = models.CharField(max_length=200)
staff_amount = models.PositiveIntegerField(default=0)
shop = models.ForeignKey(
Shop,
on_delete=models.CASCADE,
related_name='department_relate',
related_query_name='department_filter',
)
def __str__(self):
return f'{self.id}-{self.sphere}-{self.shop}'
class Meta:
verbose_name = 'Department'
verbose_name_plural = 'Departments'
ordering = ['id']
def get_absolute_url(self):
return reverse('department_detail', kwargs={
'shop_pk': self.shop.id,
'pk': self.id})
class Item(models.Model):
name = models.CharField(max_length=200)
description = models.TextField()
price = models.PositiveIntegerField(default=0)
is_sold = models.BooleanField(default=False)
comments = ArrayField(base_field=models.CharField(max_length=200),
null=True, blank=True)
department = models.ForeignKey(
Department,
on_delete=models.CASCADE,
related_name='item_relate',
related_query_name='item_filter'
)
def __str__(self):
return f"""id:{self.id} description:{self.description}price:{self.price
} is_sold:{self.is_sold} department:{self.department} """
def get_absolute_url(self):
return reverse('item_detail', kwargs={
'shop_pk': self.department.shop.id,
'dep_pk': self.department.id,
'pk': self.pk})
class Meta:
verbose_name = 'Item'
verbose_name_plural = 'Items'
ordering = ['id', ]
# constraints = [
# models.CheckConstraint(
# check=models.Q('price__gte' == 0),
# name='price_CK',
# ),
# ]