簡體   English   中英

統計SQL查詢

[英]Statistic sql query

我正在繪制一個統計圖表,因此我需要獲取圖表,該數據在x軸上有12個月,每個月有3個狀態部分,每個狀態部分都顯示其計數值。 我想到這樣的SQL:

SELECT status,count(*), created_date
FROM Profile
WHERE DATE_PART('MONTH', created_date ) = '6'
GROUP BY status

但是這個只是在一個月中獲得每個值的必要值,如果這樣做,我必須做12次才能獲得12個月的數據。 所以我想在一個查詢中獲得12個月的數據,所以有沒有人對此有解決方案?
這是我的數據表結構

  create table Profile (
        pro_id LONG not null primary key,
        created_date DATE null,
        status VARCHAR(75) null, // it just 3 status: applied, denied, processing
    );

如@jarlh建議的那樣,MCVE會更有用,但是在兩行之間閱讀時,我認為您正在尋找類似的東西。 您需要按狀態和月份分組才能報告您12個月中的每個月。

SELECT status
      ,DATE_PART('MONTH', created_date )
      ,count(*) as month_count
  FROM Profile
-- WHERE DATE_PART('MONTH', created_date ) = '6'
GROUP BY status
        ,DATE_PART('MONTH', created_date )

根據查詢的語法,此答案假定數據庫為Postgres。

好吧,您的查詢沒有考慮年份。 我懷疑您真的想要這樣的事情:

SELECT date_trunc('month', created_date) as yyyymm, status, count(*)
FROM Profile
WHERE created_date >= date_trunc('month', now())
GROUP BY yyyymm, status;

但是,您可能希望將其作為列:

SELECT date_trunc('month', created_date) as yyyymm,
       COUNT(*) FILTER (WHERE status = :status1) as status_1,
       COUNT(*) FILTER (WHERE status = :status2) as status_2,
       COUNT(*) FILTER (WHERE status = :status3) as status_3
FROM Profile
WHERE created_date >= date_trunc('month', now())
GROUP BY yyyymm;

這可能更適合於繪圖目的。

暫無
暫無

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

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