日期:2014-05-18  浏览次数:20789 次

求SQL。。不是很难的。。
这次操作涉及到的字段有三个
投票者编号           候选人         投票时间

1投票者编号   这个地方需要做个   去除重复的操作
2候选人     这里要统计出每个   候选人被选的次数最多,以及他们都被得了多少票
3投票时间     这里   是分轮投票的,想取     一段时间内的票,这个问题不大,我自己能解决
数据如:
投票者编号           候选人         投票时间
1                                 aa               ....          
2                                 aa               .....                
3                                 bb               ...            
2                                 cc                   ..
3                                 aa
2                                 dd
4                                 xx
。。。。。



------解决方案--------------------
就这个数据,你想得到的结果是什么样的?
投票者编号 候选人 投票时间
1 aa ....
2 aa .....
3 bb ...
2 cc ..
3 aa
2 dd
4 xx

------解决方案--------------------
結果呢?
------解决方案--------------------
create table T(投票者编号 int, 候选人 varchar(10), 投票时间 datetime)
insert T select 1, 'aa ', null
union all select 2, 'aa ', null
union all select 3, 'bb ', null
union all select 2, 'cc ', null
union all select 3, 'aa ', null
union all select 2, 'dd ', null
union all select 4, 'xx ', null

select 候选人, 票数=count(*) from T group by 候选人

--result
候选人 票数
---------- -----------
aa 3
bb 1
cc 1
dd 1
xx 1

(5 row(s) affected)
------解决方案--------------------
select 候选人, 票数=count(*) from T group by 候选人 order by count(*)
排一下序更好些吧
------解决方案--------------------
select 候选人, 票数=count(*) from T group by 候选人 order by count(*) desc

------解决方案--------------------
SELECT 候选人, COUNT(DISTINCT 投票者编号) AS 票数
FROM T
GROUP BY 候选人
ORDER BY 票数 DESC
------解决方案--------------------
select 候选人,count(*) as 票数 from
(select distinct 投票者编号,候选人,投票时间 from [数据表])t
group by t.候选人
------解决方案--------------------