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

9

我有一个名为tableA的表格,其中包含不同的数值:

 data
------
 10
 15
 20
 40
 40000
 50000
 60000

此外,我需要获取有关该数据的一些统计信息(并且我希望在一个查询中完成),例如:
select count(data) from tableA where data < 100
union all
select count(data) from tableA  where data >= 100

因此,我收到了:

(No column name)
----------------
4
3

但是我希望能够将结果显示在一行中,像这样:

Small | Big
---------
4     | 3 

怎样做呢?这是否可能?

4个回答

11

尝试使用子查询,而不是像这样使用 UNION ALL

SELECT
  (SELECT COUNT(data) FROM tableA WHERE data < 100) AS Small,
  (SELECT COUNT(data) FROM tableA WHERE data >= 100) AS Big

请点击此处查看 SQLFiddle 示例


11
select count(case when data < 100 then 1 end) as Small,
       count(case when data >= 100 then 1 end) as Big
from TableA

使用平均数,它会看起来像这样。

select avg(case when data < 100 then data end) as Small,
       avg(case when data >= 100 then data end) as Big
from TableA

它能否轻松地更改以适应另一个表达式(例如“AVG”)? - qehgt
2
使用这种查询方式,在字段列表中使用case when..而不是子查询,相比其他答案具有优势,它只需要进行一次表扫描而不是两次。 - Mikael Eriksson
是的,这就是为什么这个答案被接受的原因。但其他答案也很好。 - qehgt

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

1
其实,其他的答案更好 :) - Mr Moose

0
create table datatable
(
  data int
)

insert into datatable values(10) 

insert into datatable values(15)

insert into datatable values(20)

insert into datatable values(40)

insert into datatable values(40000)

insert into datatable values(50000)

insert into datatable values(60000)



create table outputtable 
( 
  small int , 
  big int 
)

insert into outputtable 
(
  small,
  big
)

select (select count(data) from datatable where data<100),
       (select count(data) from datatable where data>=100)

select * from datatable

select * from outputtable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接