大多数客户位于哪里?
Where are most customers located?
我有一个类似于以下的客户数据表
CustID InState
===================
1 0
2 0
3 1
其中 InState = 0 对应客户不在状态,Instate = 1 对应客户在状态。如果有更多州外客户,我想为 return“州外”编写一个存储过程,如果有更多州内客户,我想为 return“州内”编写一个存储过程。
我刚开始使用基本查询,这就是我所拥有的:
SELECT
COUNT(CASE WHEN InState = 0 THEN 1 END) as 'Out-of-State',
COUNT(CASE WHEN InState = 1 THEN 1 END) as 'In-State'
FROM Customers
这为我提供了每个类别的计数,但我只想要两者中较大者的答案。我该怎么做?
我觉得你差不多了
SELECT CASE WHEN COUNT(
CASE WHEN InState = 0 THEN 1 END) >
COUNT(CASE WHEN InState = 1 THEN 1 END)
THEN 'Out of State'
ELSE 'In State'
END GreaterClassification
FROM Customers
也许这样的事情可以帮助
declare @t table (custid int, instate int)
insert into @t values (1, 0), (2, 0), (3, 1)
select case when t.instate = 1 then 'in the state' else 'not in the state' end as position
from ( select top 1 count(instate) poscount, instate
from @t
group by instate
order by 1 desc
) t
结果是not in the state
SELECT
COUNT(CASE WHEN InState = 0 THEN 1 END) as OutOfState,
COUNT(CASE WHEN InState = 1 THEN 1 END) as InState,
CASE
WHEN COUNT(CASE WHEN InState = 0 THEN 1 END)- COUNT(CASE WHEN InState = 1 THEN 1 END)>0 THEN 'OUT OF STATE'
WHEN COUNT(CASE WHEN InState = 0 THEN 1 END)- COUNT(CASE WHEN InState = 1 THEN 1 END)<0 THEN 'IN STATE'
ELSE 'DAMN THEY ARE EQUAL'
END
FROM Customers
如果instate
只取0
和1
的值,则使用sum()
:
select (case when sum(instate) > sum(1 - instate) then 'In State'
when sum(instate) < sum(1 - instate) then 'Not In State'
else 'Equal'
end)
from customers;
我有一个类似于以下的客户数据表
CustID InState
===================
1 0
2 0
3 1
其中 InState = 0 对应客户不在状态,Instate = 1 对应客户在状态。如果有更多州外客户,我想为 return“州外”编写一个存储过程,如果有更多州内客户,我想为 return“州内”编写一个存储过程。
我刚开始使用基本查询,这就是我所拥有的:
SELECT
COUNT(CASE WHEN InState = 0 THEN 1 END) as 'Out-of-State',
COUNT(CASE WHEN InState = 1 THEN 1 END) as 'In-State'
FROM Customers
这为我提供了每个类别的计数,但我只想要两者中较大者的答案。我该怎么做?
我觉得你差不多了
SELECT CASE WHEN COUNT(
CASE WHEN InState = 0 THEN 1 END) >
COUNT(CASE WHEN InState = 1 THEN 1 END)
THEN 'Out of State'
ELSE 'In State'
END GreaterClassification
FROM Customers
也许这样的事情可以帮助
declare @t table (custid int, instate int)
insert into @t values (1, 0), (2, 0), (3, 1)
select case when t.instate = 1 then 'in the state' else 'not in the state' end as position
from ( select top 1 count(instate) poscount, instate
from @t
group by instate
order by 1 desc
) t
结果是not in the state
SELECT
COUNT(CASE WHEN InState = 0 THEN 1 END) as OutOfState,
COUNT(CASE WHEN InState = 1 THEN 1 END) as InState,
CASE
WHEN COUNT(CASE WHEN InState = 0 THEN 1 END)- COUNT(CASE WHEN InState = 1 THEN 1 END)>0 THEN 'OUT OF STATE'
WHEN COUNT(CASE WHEN InState = 0 THEN 1 END)- COUNT(CASE WHEN InState = 1 THEN 1 END)<0 THEN 'IN STATE'
ELSE 'DAMN THEY ARE EQUAL'
END
FROM Customers
如果instate
只取0
和1
的值,则使用sum()
:
select (case when sum(instate) > sum(1 - instate) then 'In State'
when sum(instate) < sum(1 - instate) then 'Not In State'
else 'Equal'
end)
from customers;