簡體   English   中英

如何在子查詢中保留分組

[英]How to preserve grouping in subquery

您好我有這樣的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

問題顯然是主查詢的分組,因為我得到相同的結果而沒有為每一行分組子查詢。

執行此類查詢的正確方法是什么?

怎么樣

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

您可以使用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'

暫無
暫無

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

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