如何做这样的 SQL 查询——by CJ(150分)

  • 主题发起人 主题发起人 CJ
  • 开始时间 开始时间
C

CJ

Unregistered / Unconfirmed
GUEST, unregistred user!
如何统计出表中某列中出现次数最多的值?
如果有多个值出现相同次数,最好能同时
列出。
BTW:要在 GROUP BY 中按年合计,按月合
计,按周合计的东东如何写?
 
1.用select ...,count(...) as field1... group by field1 order by field1
不行吗?
2.用 EXTRACT(YEAR FROM date1) AS YY ...group by yy.. 按年
EXTRACT(MONTH FROM date1) AS MM,...group by mm.. 按月
按周可能要用计算字段先统计。

 
YES,MENXIN 已经说的很清楚了
 
不是要数字,是出现最多的值
比如:
1
2
3
3
3
2
2
1
0
希望显示:2、3
 
我看要进行两步处理,用SQL没办法做这个。
首先对此字段进行排序,由于有相同的,所以相同的会排在一起不分先后。
创建一个数组,动态的也行。
a: record
a1: string;
// or other
a2: Word;
end;
b: array of a;
从第一个记录开始,取此段值,如果没有在数组内就加入,
如果有就Count增一。
最后出现Count最大的一个就是此值。
前期的数据运算可能慢点,后期的数组运算应该不算慢。
 
表A 的结构和字段直
cj_id, aa
1 1
2 2
3 2
4 3
5 3
6 2
7 3
8 0
9 1
想查询最多的,也就是显示 出 2 和 3 来,OK, let'sdo
select distinct aa, count(aa) as cj
from dbo.chk
group by aa
order by cj desc
好了,现在执行这个查询, 次数最多的 2 和 3 是排在最前面的
显示结果
2 3
3 3
1 2
0 1


 
3h:如果那么做,我就不问了
坏人:这样我也会(CJ还没惨到这地步),不满足条件的不要,我要实现的是类似
select max(aaa) 的功能,可惜没有 select most(aaa)
 
to cj:
你懒到家了,"技术的进步是靠懒人推动的"---- 我语
也许等你革新了SQL标准,也许会支持吧, 来一个SQL2000标准,呵呵
 
要是SQL也能自定义函数就好了 :-(
 
标准SQL的from语句后面的表可以是一个子查询,因此可以用这个特征在一条语句写出这个查询,设有表a
aa
1
2
2
3
3
以下查询返回
2
3
select a1.aa from (select count(aa) as a1_cn, aa from a group by aa ) as a1
where a1_cn >= ( select max (cn ) from (select count(aa) as cn from a group by aa) as tmp )
 
无非要定义一些@@变量,还有游标之类的东西!
写起来麻烦一点,但是还是有可能,zx 学艺不
精,要查书才能写.
对了,sybase的游标,还有定义变量,应该是标
准的sql吧?
 
xiaotian:可以
pi:知道
zx:也知道,不过效率不高,谁帮我写一个?
 
SELECT MAX(T1)
FROM (SELECT COUNT(。。)T1 FROM 。。 GROUP BY 。。)
THIS SQL CAN RUN ON ORACLE OR DB2,
其他的我不知道。
OR
FUNCTION MAXVALUE:INTEGER
begin
WITH TQUERY。CREATE(NIL)do
begin
TYR
DATABASENAME := ‘。。’;
SQL。ADD(‘SELECT COUNT(。。)T1 FROM 。。 GROUP BY 。。’);
ACTIVE := TRUE;
RESULT :=0;
WHILE NOT EOFdo
begin
IF FIELDBYANME(‘T1’)。ASINTEGER > TEMPVALUE then
RESULT := FIELDBYANME(‘T1’)。ASINTEGER;
END;
FINALLY
FREE;
END
END;
 
sql7.0 好像也添加了取出现次数最多的一个函数,具体不太清楚!
 
多人接受答案了。
 
后退
顶部