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