[英]SQL server management studio subquery
我正在嘗試在 SQL Server management Studio 2016 中運行此子查詢,但它出錯了。 它適用於 MySQL。 請指教:
select count(distinct company)
from
(
select company, sum(net_value_gbp) as last2yr_spend
from Orders
where bill_date >='01-Jan-2016'
group by company)
where last2yr_spend >50
別名您的子查詢,如下所示
SELECT COUNT(DISTINCT company)
FROM
(
SELECT company,
SUM(net_value_gbp) AS last2yr_spend
FROM Orders o
WHERE bill_date >= '01-Jan-2016'
GROUP BY company
) A
WHERE A.last2yr_spend > 50;
像下面這樣做:
select count(distinct company)
from
( select company, sum(net_value_gbp) as last2yr_spend
from Orders
where bill_date >= '01-Jan-2016'
group by company )
AS T1
where T1.last2yr_spend > 50
您必須對 sql server 中的子查詢使用ALIAS
。
別名是一個問題。 但是,您應該像這樣編寫查詢:
select count(*)
from (select company, sum(net_value_gbp) as last2yr_spend
from Orders o
where bill_date >= '2016-01-01'
group by company
) c
where last2yr_spend > 50;
筆記:
COUNT(DISTINCT)
。 子查詢為每個公司返回一行。 COUNT(DISTINCT)
會產生額外的開銷,因此簡單的COUNT(*)
就足夠了。company
曾經為NULL
*並且您不想計算它,則您只需要COUNT(company)
(而不是COUNT(*)
)。select count(company)
from
(
select company, sum(net_value_gbp) as last2yr_spend
from Orders
where bill_date >='01-Jan-2016'
group by company
having sum(net_value_gbp) > 50) as T1
子查詢的替代方法是 CTE,我發現它的可讀性稍高一些。 類似於以下內容:
;with orders_by_comp as (
select company, sum(net_value_gbp) as last2yr_spend
from Orders o
where bill_date >= '2016-01-01'
group by company)
select count(distinct company)
from orders_by_comp
where last2yr_spend > 50;
你可以使用的總和過濾having
這樣的:
with cte
AS
(
select company
from Orders
where bill_date >='01-Jan-2016'
group by company
having sum(net_value_gbp) > 50
)
select count(distinct company)
from cte;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.