[英]Combining query results into one
我試圖將 4 個計算返回到一個表中,這將是結果
這是截至目前的查詢:
/* new account */
SELECT count(*) as "new account"
FROM teams_trial teams
WHERE teams.user_id not in (select user_id from user_space_snapshot) and DATEADD(DAY, -30, GETDATE()) < teams.created_day
/* under limit */
SELECT count(*) as "under limit"
FROM user_space_snapshot u INNER JOIN trial_teams t ON (t.user_id = u.user_id)
WHERE DATEADD(DAY, -30, GETDATE()) < t.created_day AND u.space_used/u.space_limit < 0.9
/* Near Limit */
SELECT COUNT(*) AS "near limit"
FROM user_space_snapshot u INNER JOIN trial_teams t ON (t.user_id = u.user_id)
WHERE DATEADD(DAY, -30, GETDATE()) < t.created_day AND u.space_used/u.space_limit between 0.9 and 1
/* Over Limit */
SELECT count(*) AS "over limit"
FROM user_space_snapshot u INNER JOIN trial_teams t ON (t.user_id = u.user_id)
WHERE DATEADD(DAY, -30, GETDATE()) < t.created_day AND u.space_used/u.space_limit > 1
理想情況下,結果如下所示:
usage_bucket | num_active_trials
---------------------------------
new account | 5043
under limit | 4560
near limit | 1200
over limit | 6452
最簡單的方法是使用union all
:
SELECT "new account" as usage_bucket, count(*) as num_active_trials
FROM teams_trial teams
WHERE teams.user_id not in (select user_id from user_space_snapshot) and DATEADD(DAY, -30, GETDATE()) < teams.created_day
union all
SELECT "under limit" as usage_bucket, count(*) as num_active_trials
FROM user_space_snapshot u INNER JOIN trial_teams t ON (t.user_id = u.user_id)
WHERE DATEADD(DAY, -30, GETDATE()) < t.created_day AND u.space_used/u.space_limit < 0.9
union all
SELECT "near limit" as usage_bucket, count(*) as num_active_trials
FROM user_space_snapshot u INNER JOIN trial_teams t ON (t.user_id = u.user_id)
WHERE DATEADD(DAY, -30, GETDATE()) < t.created_day AND u.space_used/u.space_limit between 0.9 and 1
union all
SELECT "over limit" as usage_bucket, count(*) as num_active_trials
FROM user_space_snapshot u INNER JOIN trial_teams t ON (t.user_id = u.user_id)
WHERE DATEADD(DAY, -30, GETDATE()) < t.created_day AND u.space_used/u.space_limit > 1
我知道這不是所要求的,但我想指出,由於 3 個查詢非常相似,您可以使用 CASE 語句將它們合並為一個
SELECT SUM(CASE WHEN u.space_used/u.space_limit < 0.9 THEN 1 ELSE 0 END) as "under limit",
SUM(CASE WHEN u.space_used/u.space_limit BETWEEN 0.9 AND 1.0 THEN 1 ELSE 0 END) as "near limit",
SUM(CASE WHEN u.space_used/u.space_limit > 1 THEN 1 ELSE 0 END) as "over limit"
FROM user_space_snapshot u
INNER JOIN trial_teams t ON (t.user_id = u.user_id)
WHERE DATEADD(DAY, -30, GETDATE()) < t.created_day
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.