簡體   English   中英

如何在PostgreSQL中創建臨時表?

[英]How to create a temp table in PostgreSQL?

我正在嘗試使用臨時表來簡化查詢。 在開始時,我使用了WITH,如果我沒有專門連接每個表,則無法識別。 處理此查詢的最佳方法是什么? 這種語法有什么問題?

資料庫

對於購買了最多(在作為客戶的整個生命周期內)standard_qty紙張的帳戶,有多少個帳戶的總購買量還更多?

create temp table t1 as (
  SELECT
    a.id as account_id,
    SUM(o.standard_qty) as all_std_qty
  FROM
    accounts a
    JOIN orders o ON (a.id = o.account_id)
  GROUP BY
    1
  order by
    2 desc
  limit
    1
)
create temp table t2 as (
  SELECT
    a.id as account_id,
    SUM(o.total) as total_purchases
  FROM
    accounts a
    JOIN orders o ON (a.id = o.account_id)
  GROUP BY
    1
)
create temp table t3 as (
  SELECT
    t1.account_id,
    t2.total_purchases as total_pur FROM
    t1
    JOIN t2 
    ON (t1.account_id = t2.account_id)
)

SELECT
  count(a.id) as count_ids
FROM
  accounts a
  JOIN orders o ON (a.id = o.account_id)
WHERE
  o.total > t3.total_pur

我認為您錯過了與表t3的聯接,並且在問題所在的where子句中使用了它,請嘗試以下查詢

WITH t1 as (
 SELECT
   a.id as account_id,
   SUM(o.standard_qty) as all_std_qty
 FROM
   accounts a
   JOIN orders o ON (a.id = o.account_id)
 GROUP BY
   1
 order by
   2 desc
 limit
   1
), t2 as (
 SELECT
   a.id as account_id,
   SUM(o.total) as total_purchases
 FROM
   accounts a
   JOIN orders o ON (a.id = o.account_id)
 GROUP BY
   1
), t3 as (
 SELECT
   t1.account_id,
   t2.total_purchases as total_pur FROM
   t1
   JOIN t2
   ON (t1.account_id = t2.account_id)
)
SELECT
 count(a.id) as count_ids
FROM
 accounts a
 JOIN orders o ON (a.id = o.account_id)
 inner join t3 on a.id=t3.account_id
WHERE
 o.total > t3.total_pur

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM