SQL中几个字段的摘要查询

时间:2008-12-09 19:32:47

标签: sql mysql count

数据表结构是:
id1,id2,id3,id4,...(其他一些字段)。
我想创建摘要查询以找出每列中使用一些ID值的次数。

数据
1,2,3,4,2008
2,3,5,1,2008
1,3,2,5,2007
1,2,3,6,2007
3,1,2,5,2007

对于值1,结果应为
1,0,0,1,2008
2,1,0,0,2007

如何使用一个查询(在MySQL中)完成此操作。

4 个答案:

答案 0 :(得分:1)

使用特征或delta函数:

DECLARE @look_for AS int
SET @look_for = 1

SELECT SUM(CASE WHEN id1 = @look_for THEN 1 ELSE 0 END) AS id1_count
    ,SUM(CASE WHEN id2 = @look_for THEN 1 ELSE 0 END) AS id2_count
    ,SUM(CASE WHEN id3 = @look_for THEN 1 ELSE 0 END) AS id3_count
    ,SUM(CASE WHEN id4 = @look_for THEN 1 ELSE 0 END) AS id4_count
FROM tbl

根据您的表和不同的ID值,还有一些方法可以生成此代码(也是使用SQL Server中的PIVOT和UNPIVOT的技术,而不是ANSI)。

答案 1 :(得分:1)

这似乎是最好的解决方案(来自Wiki):

select years,
sum(1*(1-abs(sign(id1-56)))) as id1,
sum(1*(1-abs(sign(id2-56)))) as id2,
sum(1*(1-abs(sign(id3-56)))) as id3,
sum(1*(1-abs(sign(id4-56)))) as id4,
from mytable
group by years

答案 2 :(得分:0)

选择

(从t1选择count(id1),其中id1 = @param)为id1,

(从t2选择count(id2),其中id2 = @param)为id2

答案 3 :(得分:-1)

如果X是您正在寻找的id值,那么您可以这样做。

select (select count(*) where id1 = X) as countid1 ... etc