我有一个如下所示的数据库:
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中获取此信息?
答案 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