求助超简单SQL语句,但我就是不会
TABEL:
name 金额
张三 5.00
李四 10.00
王麻子 20.05
张三 8.75
张三 9.90
李四 12.00
用group by name 分组后
当然是
name
张三
李四
王麻子
但我要得出的是分组后的count,即count=3
请问大家这句SQL语句怎么写?
问题点数:75、回复次数:27Top
1 楼xeqtr1982(Visual C# .NET)回复于 2006-05-28 15:40:31 得分 30
declare @t table(name varchar(10),金额 dec(10,2))
insert into @t select '张三' ,5.00
union all select '李四' ,10.00
union all select '王麻子' ,20.05
union all select '张三' ,8.75
union all select '张三' ,9.90
union all select '李四' ,12.00
select count(*) from (select name from @t group by name)aTop
2 楼roy_88(中国风_燃烧你的激情!!!)回复于 2006-05-28 15:41:19 得分 0
select name ,count(name)from 表名 group by nameTop
3 楼yaoyaomaomao(广州考拉)回复于 2006-05-28 15:54:24 得分 0
select name ,count(*) from 表 group by nameTop
4 楼sql2006()回复于 2006-05-28 16:13:37 得分 0
顶Top
5 楼cnfool(天大的白痴)回复于 2006-05-28 16:25:13 得分 0
先谢谢大家耐心解答了,但HaN的方法ODBC通不过,
而roy_88和yaoyaomaomao(广州考拉) 中的count无疑还是=6
是不是我的表达不够清楚,我希望这个时候的结果是count=3(即不论发生多少笔业务,但我要统计的是多少个人参与了消费,再返回人名)Top
6 楼xeqtr1982(Visual C# .NET)回复于 2006-05-28 16:27:19 得分 0
ODBC?
查询分析器能执行吗?Top
7 楼cnfool(天大的白痴)回复于 2006-05-28 16:48:38 得分 0
在MSSQL的查询分析器里能通过并返回正确答案,
但我在软件里应该怎么写呢?我现在正用的不是MSSQL而是mysql,mysql似乎不支持这种写法,我还能怎么写呢?他们后面两者的写法可以怎么改能达到我的目的呢?就是说我既要返回记录总数又要返回每个人名,
先谢谢HaN的耐心指导了。Top
8 楼xeqtr1982(Visual C# .NET)回复于 2006-05-28 16:51:23 得分 0
mysql还真没用过。按说应该支持这样的写法的。试试吧
select count(*) from (select name from 表 group by name)a
select count(*) from (select name from 表 group by name)
--Top
9 楼cnfool(天大的白痴)回复于 2006-05-28 16:55:14 得分 0
对不起,刚才是我的错,复合查询在这里运行是可以的,是我打错了一个字母所以报错,现在已返回记录数的正确答案,但是能否同时返回name呢?
还请HaN指教。
另在mysql中
select count(*) from (select name from 表 group by name)a 可行
select count(*) from (select name from 表 group by name) 报错Top
10 楼itblog(Just for wife!)回复于 2006-05-28 16:58:45 得分 30
select count(*) from (select name from 表 group by name)a 可行
select count(*) from (select name from 表 group by name) B --要加别名,不加,肯定会报错~
Top
11 楼Reeezak(坚持信念)回复于 2006-05-28 17:01:24 得分 15
select count(*) from (select name from 表 group by name) 报错
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
原因是你的from后面的这个子查询是必要要有一个别名的,这是一个规范
SQLServer也是有这个规范的
而Oracle没有,你可以写也可以不写,但是如果需要子查询的某些字段就必须写
反正,写了是符合规范的就是了,hoho
另外,lz希望如何返回name呢?Top
12 楼Reeezak(坚持信念)回复于 2006-05-28 17:03:20 得分 0
lz是要这个效果吗?
SELECT Name, COUNT(*) FROM 表 GROUP BY NameTop
13 楼itblog(Just for wife!)回复于 2006-05-28 17:03:23 得分 0
另外,你这样写还有有点多余~
select count(distinct name) from 表
这样一样可以达到你的目的~Top
14 楼xeqtr1982(Visual C# .NET)回复于 2006-05-28 17:03:29 得分 0
我还以为mysql和access的一样呢。
select count(*) from (select name from 表 group by name) -access不写没问题
Top
15 楼Reeezak(坚持信念)回复于 2006-05-28 17:05:17 得分 0
还是要这样的效果?
SELECT DISTINCT Name FROM 表
UNION
SELECT COUNT(DISTINCT Name) FROM 表Top
16 楼xeqtr1982(Visual C# .NET)回复于 2006-05-28 17:07:45 得分 0
declare @t table(name varchar(10),金额 dec(10,2))
insert into @t select '张三' ,5.00
union all select '李四' ,10.00
union all select '王麻子' ,20.05
union all select '张三' ,8.75
union all select '张三' ,9.90
union all select '李四' ,12.00
select count(*),name from (select name from @t group by name)a group by name
select count(distinct name),name from @t group by name
--itblog得好啊。学习Top
17 楼cnfool(天大的白痴)回复于 2006-05-28 17:11:39 得分 0
Reeezak(坚持信念) ( ) 信誉:100 2006-05-28 17:03:00 得分: 0
lz是要这个效果吗?
SELECT Name, COUNT(*) FROM 表 GROUP BY Name
嘿嘿,我倒是想要记录数+name,但似乎好象一条语句返回不出这个结果来,我现在倒是按照HaN的指导写出结果来了,只是把记录总数和返回name分成了两段查询,看着代码多了总是不爽,有同时返回的办法吗?
再次谢谢大家热心关注!为感谢大家的热心,分数增加50分。Top
18 楼xeqtr1982(Visual C# .NET)回复于 2006-05-28 17:15:28 得分 0
楼主要的结果是什么样子?
Top
19 楼itblog(Just for wife!)回复于 2006-05-28 17:16:41 得分 0
大哥,什么时候结帐?你爽了,大伙还没有爽呢~Top
20 楼cnfool(天大的白痴)回复于 2006-05-28 17:23:24 得分 0
呵呵,马上结贴,本来还想看看有什么可以同时返回记录总数和name的写法的,刚才自己写了又写,想了想没戏,还是必须分成两段。
itblog(^ω^) 兄台的方法确实不错,详细指导更不错!谢谢兄台了!Top
21 楼itblog(Just for wife!)回复于 2006-05-28 17:26:26 得分 0
兄弟要这个吗?
select name,[count]=(select count(name) from 表 where name=a.name)
from 表 a
group by nameTop
22 楼itblog(Just for wife!)回复于 2006-05-28 17:28:43 得分 0
或是这个~
select name,[count]=(select count(distinct name) from 表 )
from 表 a
group by nameTop
23 楼cnfool(天大的白痴)回复于 2006-05-28 17:33:35 得分 0
select name,[count]=(select count(name) from 表 where name=a.name)
from 表 a
group by name
这个好象也不能在一个查询表内返回表总记录数和分别的name吧。。。
不过问题已经解决了,非常感谢各位!但新的问题出来了
我晕~贴子回复总数大于给分次数什么意思,那要怎么给分?好久不来,难道连给分都不会了!!!!!!?????????!·#¥!·#%¥·#¥%#¥%#¥%……#Top
24 楼xingmaohai(九天揽月)回复于 2006-05-28 17:33:44 得分 0
是要這樣的結果嗎
Select name,count(name) as colname from tablename
group by name having count(name)=3Top
25 楼cnfool(天大的白痴)回复于 2006-05-28 17:40:03 得分 0
终于结成贴子了!差点把我郁闷死!!!!!老报什么“贴子回复总数大于给分次数”的错!!!
现在怎么不报错了,你报啊你报啊~~!!!!哼哼!!!!Top
26 楼slxu_yjs04(盐城人)回复于 2006-05-29 07:46:21 得分 0
select count(*) from (select distinct name from 表名 )Top
27 楼molosolo()回复于 2006-05-29 19:40:58 得分 0
select count(distinct name) from ** group by nameTop




