在一个表上组合两个SQL查询

qeh*_*hgt 8 sql sql-server

我有一个tableA不同的价值观:

 data
------
 10
 15
 20
 40
 40000
 50000
 60000
Run Code Online (Sandbox Code Playgroud)

此外,我需要获取有关该数据的一些统计信息(我想在一个查询中执行此操作),例如:

select count(data) from tableA where data < 100
union all
select count(data) from tableA  where data >= 100
Run Code Online (Sandbox Code Playgroud)

结果,我收到了

(No column name)
----------------
4
3
Run Code Online (Sandbox Code Playgroud)

但我希望在一行中收到结果,如下所示:

Small | Big
---------
4     | 3 
Run Code Online (Sandbox Code Playgroud)

怎么做?可能吗?

Mik*_*son 11

select count(case when data < 100 then 1 end) as Small,
       count(case when data >= 100 then 1 end) as Big
from TableA
Run Code Online (Sandbox Code Playgroud)

平均值看起来像这样.

select avg(case when data < 100 then data end) as Small,
       avg(case when data >= 100 then data end) as Big
from TableA
Run Code Online (Sandbox Code Playgroud)

  • 像这样执行查询,使用`case when..`而不是字段列表中的子查询作为其他答案,其优点是它只会执行一次表扫描而不是两次. (2认同)

him*_*056 10

尝试子查询而不是UNION ALL像这样:

SELECT
  (SELECT COUNT(data) FROM tableA WHERE data < 100) AS Small,
  (SELECT COUNT(data) FROM tableA WHERE data >= 100) AS Big
Run Code Online (Sandbox Code Playgroud)

看到这个SQLFiddle


Mr *_*ose 6

DECLARE @tst TABLE (
   val INT

)

INSERT INTO @tst (val)
SELECT 10
UNION
SELEcT 15
UNION 
SELECT 20
UNION 
SELECT 40
UNION
SELECT 40000
UNION
SELECT 50000
UNION 
SELECT 60000

;WITH Smalls AS (
SELECT COUNT(val) Small FROM @tst WHERE val < 100 
), Bigs AS(
select count(val) Big from @tst where val >= 100
)
SELECT Small, Big
 FROM Smalls, Bigs
Run Code Online (Sandbox Code Playgroud)