Как преобразовать два отдельных запроса в один длинный подвыбор

Так что у меня такая проблема. У меня уже есть результат, который я хотел, но я хочу найти лучший способ его решить. Я хочу рассчитать количество проданных продуктов с количеством атрибутов этого продукта.

Сначала я создал новую таблицу для статистики.

drop table if exists stat1 cascade;
create table stat1(
    id serial primary key,
    products integer,
    numberOfAtributtes integer
);

Здесь я рассчитываю продукты, которые находятся в корзине заказов, а также атрибуты манца, которые имеет этот продукт.
В конце я вставляю данные в созданную таблицу stat1.

with data as(
    (select k.product_id as pp, count( ap.atribut_id) as numberOfAtributes from productAtributes as ap
    JOIN cart k ON k.product_id = ap.product_id
    GROUP BY  k.product_id) )
insert into stat1(pp, numberOfAtributes)
select pp , numberOfAtributes from data;

Это вывод, который я вставляю в таблицу stat1.

Как преобразовать два отдельных запроса в один длинный подвыбор

И, наконец, третий запрос, который я выполняю, — это подсчет количества проданных продуктов manz с одинаковым количеством атрибутов.

select count(numberOfAtributes), numberOfAtributes
from stat1
group by numberOfAtributes;

Заданный и (ожидаемый) результат:

Как преобразовать два отдельных запроса в один длинный подвыбор

Можно ли сократить его до одного запроса (может быть, с помощью подзапроса? Я пытался, но это не сработало), поэтому без создания дополнительной таблицы stat1?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
16
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использование простого CTE вместо временной таблицы должно работать (не проверено):

with stat1(products, numberOfAtributes) as (
    select k.product_id as pp, count( ap.atribut_id) as numberOfAtributes from productAtributes as ap
    JOIN cart k ON k.product_id = ap.product_id
    GROUP BY  k.product_id )
select count(numberOfAtributes), numberOfAtributes
from stat1
group by numberOfAtributes;

Другие вопросы по теме