[英]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.