mitbbs.com
  首页 -分类讨论区 - 学术学科 - 统计版 - 同主题阅读文章
  首页
  分类广告
分类讨论区
  移民专栏
新闻中心
  精华区
  未名博客
  俱乐部
  未名形象秀
  未名黄页
  未名交友
  未名人才
  海运回国
未名交友
[更多]
[更多]
www.rencai8.com/job_info?action=view&job_position_id=472612
同主题阅读:SQL中啥时候用group by, 啥时候用self-join?
[版面:统计][首篇作者:pushme] , 2012年02月08日02:01:23
[分页:1 ]
pushme
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报]
[ 1 ]

发信人: pushme (整夜失眠mm), 信区: Statistics
标  题: SQL中啥时候用group by, 啥时候用self-join?
发信站: BBS 未名空间站 (Wed Feb  8 02:01:23 2012, 美东)

我想要的结果很简单,就是对联系人表按Region分组,然后列出整张表的所有列(
ContactName, Address, City, Region),给的query sample是用self-join,见下:

SELECT DISTINCT c1.ContactName, c1.Address, c1.City, c1.Region
            FROM Customers AS c1, Customers AS c2
            WHERE c1.Region = c2.Region
            AND c1.ContactName <> c2.ContactName
            ORDER BY c1.Region, c1.ContactName

但我直觉就不会想到用self-join, 一看分组就想用group by。是不是分组如果不涉及
aggregate,还是用self-join比较好?

想要的结果见附件,就是对region分组,然后显示其他各项。
--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 128.12.]


此主题相关图片如下:

self-join.JPG
(64524 字节) [删除]

 
givemeoffer
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报]
[ 2 ]

发信人: givemeoffer (这不扯呢么), 信区: Statistics
标  题: Re: SQL中啥时候用group by, 啥时候用self-join?
发信站: BBS 未名空间站 (Wed Feb  8 11:47:28 2012, 美东)

not 100% sure what you want, but it seems 'select distinct * FROM Customers
order by region,ContactName ' works
--
不要问我在哪工作

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 72.9.]

 
alex943
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报]
[ 3 ]

发信人: alex943 (alex), 信区: Statistics
标  题: Re: SQL中啥时候用group by, 啥时候用self-join?
发信站: BBS 未名空间站 (Wed Feb  8 12:11:02 2012, 美东)

难道这位失眠mm 就是为了这个整夜失眠 ?

我老觉得group by确实好用 很直接,但有个重要限制: 在select里面其他字段就不能
直接放进去了. 比如下句在oracle里面就会报错.
select region, name
from view1
group by region

但在sas里面没问题. 其他数据库没试过, teradata也不行.
这个时候就得用subquery绕出来.

嗨 其实大家都懂的.
【 在 pushme (整夜失眠mm) 的大作中提到: 】
: 我想要的结果很简单,就是对联系人表按Region分组,然后列出整张表的所有列(
: ContactName, Address, City, Region),给的query sample是用self-join,见下:
: SELECT DISTINCT c1.ContactName, c1.Address, c1.City, c1.Region
:             FROM Customers AS c1, Customers AS c2
:             WHERE c1.Region = c2.Region
:             AND c1.ContactName <> c2.ContactName
:             ORDER BY c1.Region, c1.ContactName
: 但我直觉就不会想到用self-join, 一看分组就想用group by。是不是分组如果不涉及
: aggregate,还是用self-join比较好?
: 想要的结果见附件,就是对region分组,然后显示其他各项。



--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 70.179.]

 
pushme
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报]
[ 4 ]

发信人: pushme (整夜失眠mm), 信区: Statistics
标  题: Re: SQL中啥时候用group by, 啥时候用self-join?
发信站: BBS 未名空间站 (Wed Feb  8 12:45:53 2012, 美东)

哇,原来这么简单,我是在网上看一个SQL tutorial,其中self-join是如我贴中的那个
query那样用的,按region分组,居然得self-join,所以我就搬上来问一问。


【 在 givemeoffer (这不扯呢么) 的大作中提到: 】
: not 100% sure what you want, but it seems 'select distinct * FROM
Customers
: order by region,ContactName ' works



--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 128.12.]

 
longtian
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报]
[ 5 ]

发信人: longtian (有人的地方,就有江湖), 信区: Statistics
标  题: Re: SQL中啥时候用group by, 啥时候用self-join?
发信站: BBS 未名空间站 (Wed Feb  8 14:09:41 2012, 美东)

把name也放到group by里边,就完了

【 在 alex943 (alex) 的大作中提到: 】
: 难道这位失眠mm 就是为了这个整夜失眠 ?
: 我老觉得group by确实好用 很直接,但有个重要限制: 在select里面其他字段就不能
: 直接放进去了. 比如下句在oracle里面就会报错.
: select region, name
: from view1
: group by region
: 但在sas里面没问题. 其他数据库没试过, teradata也不行.
: 这个时候就得用subquery绕出来.
: 嗨 其实大家都懂的.



--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 204.138.]

 
pushme
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报]
[ 6 ]

发信人: pushme (魔法棒公主~), 信区: Statistics
标  题: Re: SQL中啥时候用group by, 啥时候用self-join?
发信站: BBS 未名空间站 (Wed Feb  8 14:38:06 2012, 美东)

但我如果要select全部(全部列包括region, name, city, address),然后只group by
region and name就不行
难道要select * from customers
group by region, name, city, address?


【 在 longtian (有人的地方,就有江湖) 的大作中提到: 】
: 把name也放到group by里边,就完了



--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 128.12.]

 
givemeoffer
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报]
[ 7 ]

发信人: givemeoffer (这不扯呢么), 信区: Statistics
标  题: Re: SQL中啥时候用group by, 啥时候用self-join?
发信站: BBS 未名空间站 (Wed Feb  8 15:11:09 2012, 美东)


【 在 pushme (魔法棒公主~) 的大作中提到: 】
: 但我如果要select全部(全部列包括region, name, city, address),然后只group
by
: region and name就不行
: 难道要select * from customers
: group by region, name, city, address?


right. and it is the same as select distinct *
--
不要问我在哪工作

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 72.9.]

 
powerpower
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报]
[ 8 ]

发信人: powerpower (屁股), 信区: Statistics
标  题: Re: SQL中啥时候用group by, 啥时候用self-join?
发信站: BBS 未名空间站 (Wed Feb  8 16:47:09 2012, 美东)

你用了group by了就是在region level上显示表了,那些人名、地址之类的怎么可能并
到一起呢,自然会报错了

可以 select count(name) as name,
或者用min()、max()这样的限制
--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 170.37.]

 
gin118
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报]
[ 9 ]

发信人: gin118 (Gin), 信区: Statistics
标  题: Re: SQL中啥时候用group by, 啥时候用self-join?
发信站: BBS 未名空间站 (Wed Feb  8 16:56:21 2012, 美东)

I think LZ's problem is a simple order problem .

No need for group by.

The purpose of using group by is not she thought of .


--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 170.201.]

 
gin118
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报]
[ 10 ]

发信人: gin118 (Gin), 信区: Statistics
标  题: Re: SQL中啥时候用group by, 啥时候用self-join?
发信站: BBS 未名空间站 (Wed Feb  8 17:01:19 2012, 美东)

agree, I think when you need any calculation in sql by group, then group by
will be used.


【 在 powerpower (屁股) 的大作中提到: 】
: 你用了group by了就是在region level上显示表了,那些人名、地址之类的怎么可能并
: 到一起呢,自然会报错了
: 可以 select count(name) as name,
: 或者用min()、max()这样的限制



--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 170.201.]

 
pushme
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报]
[ 11 ]

发信人: pushme (魔法棒公主~), 信区: Statistics
标  题: Re: SQL中啥时候用group by, 啥时候用self-join?
发信站: BBS 未名空间站 (Wed Feb  8 19:06:00 2012, 美东)

很对,我这个问题确实只是一个order by的问题
【 在 gin118 (Gin) 的大作中提到: 】
: I think LZ's problem is a simple order problem .
: No need for group by.
: The purpose of using group by is not she thought of .



--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 128.12.]

 
powerpower
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报]
[ 12 ]

发信人: powerpower (屁股), 信区: Statistics
标  题: Re: SQL中啥时候用group by, 啥时候用self-join?
发信站: BBS 未名空间站 (Wed Feb  8 20:52:54 2012, 美东)

哦,你一说我再一看主贴。LZ自己表述不清楚

【 在 gin118 (Gin) 的大作中提到: 】
: agree, I think when you need any calculation in sql by group, then group
by
: will be used.



--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 216.195.]

 
songkun
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报]
[ 13 ]

发信人: songkun (告别棒球场), 信区: Statistics
标  题: Re: SQL中啥时候用group by, 啥时候用self-join?
发信站: BBS 未名空间站 (Wed Feb  8 23:53:48 2012, 美东)

你这不叫按Region分组。

GROUP BY region的话, 结果里面每个不同的region只会有一行。
你这个同一个region在结果里面还有不同的行, 根本不是
GROUP BY要做的事情。

【 在 pushme (整夜失眠mm) 的大作中提到: 】
: 我想要的结果很简单,就是对联系人表按Region分组,然后列出整张表的所有列(
: ContactName, Address, City, Region),给的query sample是用self-join,见下:
: SELECT DISTINCT c1.ContactName, c1.Address, c1.City, c1.Region
:             FROM Customers AS c1, Customers AS c2
:             WHERE c1.Region = c2.Region
:             AND c1.ContactName <> c2.ContactName
:             ORDER BY c1.Region, c1.ContactName
: 但我直觉就不会想到用self-join, 一看分组就想用group by。是不是分组如果不涉及
: aggregate,还是用self-join比较好?
: 想要的结果见附件,就是对region分组,然后显示其他各项。



--
有人问一个法国四年级小朋友,3+4等于几?回答:不知道。
那4+3等于几?还是回答不知道。
那你小学都学了些什么呀?我知道3+4==4+3。
为什么呀?因为加法是一个Abel群。

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 98.248.]

[分页:1 ]
[快速返回] [ 进入统计讨论区] [返回顶部]
回复文章
标题:
内 容:

未名交友
将您的链接放在这儿

友情链接


 

Site Map - Contact Us - Terms and Conditions - Privacy Policy

版权所有,未名空间(mitbbs.com),since 1996