计算SQL中的区别

时间:2013-04-23 15:11:37

标签: sql sql-server

我有一个如下所示的数据库:

Source   quoted    sold
google     1         0
google     0         0
google     1         1
google     1         0
google     1         1
direct     1         0
direct     0         0
direct     1         1
google     1         0

我想计算一下来自谷歌的引用人数,以及购买来自谷歌的人数,以及其他来源。所以上面的结果看起来像是

Source  quotes   solds
google    5        2
direct    2        1
another   23       5   (not noted above, but there are countless more)

如何在SQL中获取此信息?

5 个答案:

答案 0 :(得分:6)

看起来简单的SUM GROUP BY会起作用:

SELECT Source, SUM(quoted), SUM(Sold)
FROM MyTable
GROUP BY Source

答案 1 :(得分:4)

如果这些列是BIT列,我将提供不同的视角,而不是无数重复。如果是,则当前查询将产生:

  

Msg 8117,Level 16,State 1,Line 14
  操作数数据类型位对于sum运算符无效。

要解决此问题,您可以使用以下结构之一:

DECLARE @t TABLE(Source VARCHAR(32), quoted BIT, sold BIT);

INSERT @t VALUES
('google',1,0),
('google',0,0),
('google',1,1),
('google',1,0),
('google',1,1),
('direct',1,0),
('direct',0,0),
('direct',1,1),
('google',1,0);

SELECT Source, 
    COUNT(NULLIF(quoted,0)), 
    COUNT(NULLIF(sold,  0))
 FROM @t
 GROUP BY Source;

SELECT Source, 
    SUM(CASE WHEN quoted = 1 THEN 1 ELSE 0 END),
    SUM(CASE WHEN sold   = 1 THEN 1 ELSE 0 END)
 FROM @t
 GROUP BY Source;

SELECT Source, 
    SUM(CONVERT(INT, quoted)),
    SUM(CONVERT(INT, sold))
 FROM @t
 GROUP BY Source;

答案 2 :(得分:2)

我认为这就是你要找的......

SELECT source, SUM(quoted), SUM(sold)
FROM your_table
GROUP BY source.

答案 3 :(得分:2)

这需要基本的GROUP BY语法,并且您的数据库设置完美:

select source, sum(quoted) quoted, sum(sold) sold
from your_table
group by source;

答案 4 :(得分:-3)

SELECT source, SUM(quoted = 1) AS quotes, SUM(solds = 1) AS solds
FROM yourtable
GROUP BY Source