2013-09-27 51 views
0

分組您好,我有一個SQL查詢是這樣的:如何保存在子查詢

SELECT 
    COUNT(*) AS total, 
    COUNT(referrer) AS referrer, 
    DATE_FORMAT(created_at, "%Y") AS YEAR, 
    DATE_FORMAT(created_at, "%m") AS MONTH, 
    DATE_FORMAT(created_at, "%d") AS DAY 
FROM 
    users 
GROUP BY 
    EXTRACT(DAY FROM created_at), 
    EXTRACT(MONTH FROM created_at), 
    EXTRACT(YEAR FROM created_at) 
ORDER BY 
    created_at ASC 

這讓我有一天(月和年)進行分類彙總表。我需要的是添加一個子查詢來顯示多一個count(),它有一個條件。例如:

(SELECT count(*) FROM users WHERE result = '1') as winners 

顯然問題在於主查詢的分組,因爲我得到的結果沒有爲每行分組子查詢。

什麼是正確的方式來執行此類查詢?

回答

1

SELECT 
    COUNT(*) AS total, 
    COUNT(referrer) AS referrer, 
    SUM(case when result = '1' then 1 else 0 end) as winners 
    DATE_FORMAT(created_at, "%Y") AS YEAR, 
    DATE_FORMAT(created_at, "%m") AS MONTH, 
    DATE_FORMAT(created_at, "%d") AS DAY 
FROM 
    users 
GROUP BY 
    EXTRACT(DAY FROM created_at), 
    EXTRACT(MONTH FROM created_at), 
    EXTRACT(YEAR FROM created_at) 
ORDER BY 
    created_at ASC; 

假設created_at是一個時間戳,我們可以只用一個場通過如下重新編寫查詢組如何:

SELECT 
    COUNT(*) AS total, 
    COUNT(referrer) AS referrer, 
    SUM(case when result = '1' then 1 else 0 end) as winners 
    DATE_FORMAT(created_at, "%Y") AS YEAR, 
    DATE_FORMAT(created_at, "%m") AS MONTH, 
    DATE_FORMAT(created_at, "%d") AS DAY 
FROM 
    users 
GROUP BY date(created_at) 
ORDER BY 
    created_at ASC; 

請注意,我沒有mysql交手。

1

您可以UNION

SELECT 
    COUNT(*) AS total, 
    COUNT(referrer) AS referrer, 
    DATE_FORMAT(created_at, "%Y") AS YEAR, 
    DATE_FORMAT(created_at, "%m") AS MONTH, 
    DATE_FORMAT(created_at, "%d") AS DAY 
FROM 
    users 
GROUP BY 
    EXTRACT(DAY FROM created_at), 
    EXTRACT(MONTH FROM created_at), 
    EXTRACT(YEAR FROM created_at) 
ORDER BY 
    created_at ASC 
UNION 
SELECT count(*) FROM users 
GROUP BY 
    EXTRACT(DAY FROM created_at), 
    EXTRACT(MONTH FROM created_at), 
    EXTRACT(YEAR FROM created_at) 
HAVING result = '1' 
+0

這可能工作加入這兩個查詢,但即時通訊與Sashikanth Dareddy去SA是更具可讀性。日Thnx – Nick