[英]Calculated column in SELECT SQL Query (MySQL)
我有以下查詢:
SELECT
a.source,
TotalCount,
ActiveCount
FROM
(
SELECT COUNT(*) AS TotalCount, a.source
FROM internship a
GROUP BY a.source
) AS A
join
(
SELECT COUNT(*) AS ActiveCount, b.source
FROM internship b
WHERE b.int_lastdate > CURDATE() AND b.status LIKE 'Published'
GROUP BY b.source
) AS B
ON A.source = B.source
上面的查詢給了我這樣的結果:
我要在此處添加另一列,即“ ExpiredCount = TotalCount-ActiveCount ”
我該如何實現?
您只需要一個表達式。 但是,您可以簡化查詢:
select i.source, i.TotalCount, i.ActiveCount,
(i.TotalCount - i.ActiveCount) as ExpiredCount
from (select i.source, count(*) as TotalCount, i.source,
sum(i.int_lastdate > curdate() and i.status like 'Published') as ActiveCount
from internship i
group by i.source
) i;
筆記:
join
此查詢,只是有條件的聚集。 編輯:
如果要將其用作視圖,則FROM
子句中不能有子查詢(MySQL限制):
select i.source, count(*) as TotalCount, i.source,
sum(i.int_lastdate > curdate() and i.status like 'Published') as ActiveCount,
(count(*) - sum(i.int_lastdate > curdate() and i.status like 'Published')) as ExpiredCount
from internship i
group by i.source
Gordon的答案可能是我希望看到的DBA繼承別人的代碼。 但是我們實際上可以完全避免使用子查詢,而只需編寫以下內容:
SELECT
source,
COUNT(*) AS TotalCount,
SUM(CASE WHEN int_lastdate > CURDATE() AND status LIKE 'Published'
THEN 1 ELSE 0 END) AS ActiveCount,
COUNT(*) - SUM(CASE WHEN int_lastdate > CURDATE() AND status LIKE 'Published'
THEN 1 ELSE 0 END) AS ExpiredCount
FROM internship
GROUP BY source
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.