L*********i 发帖数: 649 | 1 company schema 见附件;
populated data 见附件;
question 4 & 5 见附件;
高人能不能指点一下呀,先谢了!
您要觉得包子不够多,您尽管要,我要有就给。 |
c*****d 发帖数: 6045 | |
L*********i 发帖数: 649 | 3 先多谢多谢!
静等您的指点!
【在 c*****d 的大作中提到】 : 不要抢,这5个包子我吃定了
|
c*****d 发帖数: 6045 | 4 刚才开会的时候生怕有人抢我包子
haha,先来个笨方法,功能肯定能实现
SELECT ssn, lname
FROM employee
WHERE ssn IN
(SELECT essn
FROM works_on
WHERE pno IN
(SELECT DISTINCT f.pno
FROM ( SELECT pno, COUNT (1) cnt
FROM employee e, works_on w
WHERE w.essn = e.ssn AND sex = 'M'
GROUP BY pno) m,
( SELECT pno, COUNT (1) cnt
FROM employee e, works_on w
WHERE w.essn = e.ssn AND sex = 'F'
GROUP BY pno) f
WHERE m.pno = f.pno AND m.cnt < f.cnt) |
c*****d 发帖数: 6045 | 5 select *
from
(select distinct e2.lname
from employee e1, employee e2
where e1.superssn = e2.ssn
and e2.sex='F') fm,
works_on w,
project p
where p.pnumber = w.pnumber
and w.essn = fm.ssn
and p.plocation='Starford' |
c*****d 发帖数: 6045 | |
L*********i 发帖数: 649 | 7 我刚从gym踢完球,又和孩子踢了一会,谢谢呀!
我待会run 一下程序。
我发现我只有伪币,5个包子是多少伪币?我转给你先?
多谢多谢!
【在 c*****d 的大作中提到】 : 先去踢球了,晚上回来看看怎么改进
|
B*****g 发帖数: 34098 | 8 为了几个包子就忘了:授人以鱼不如授人以渔
【在 c*****d 的大作中提到】 : 不要抢,这5个包子我吃定了
|
c*****d 发帖数: 6045 | 9 我到处要包子不就是年底要还你1600伪币
如果你说不用还了,我就授人以渔
【在 B*****g 的大作中提到】 : 为了几个包子就忘了:授人以鱼不如授人以渔
|
c*****d 发帖数: 6045 | 10 这句话最后少了一个括号
【在 c*****d 的大作中提到】 : 刚才开会的时候生怕有人抢我包子 : haha,先来个笨方法,功能肯定能实现 : SELECT ssn, lname : FROM employee : WHERE ssn IN : (SELECT essn : FROM works_on : WHERE pno IN : (SELECT DISTINCT f.pno : FROM ( SELECT pno, COUNT (1) cnt
|
|
|
c*****d 发帖数: 6045 | 11 SELECT ssn, lname
FROM employee
WHERE ssn IN
(SELECT essn
FROM works_on
WHERE pno IN
(SELECT DISTINCT f.pno
FROM ( SELECT pno, COUNT (1) cnt
FROM employee e, works_on w
WHERE w.essn = e.ssn AND sex = 'M'
GROUP BY pno) m,
( SELECT pno, COUNT (1) cnt
FROM employee e, works_on w
WHERE w.essn = e.ssn AND sex = 'F'
GROUP BY pno) f
WHERE m.pno = f.pno AND m.cnt < f.cnt)
) |
c*****d 发帖数: 6045 | 12 第一题在oracle里还可以这么做
SELECT ssn, lname
FROM (SELECT ssn,
lname,
pno,
SUM (DECODE (sex, 'f', 1, 0)) OVER (PARTITION BY pno) cnt_f,
SUM (DECODE (sex, 'm', 1, 0)) OVER (PARTITION BY pno) cnt_m
FROM employee e, works_on w
WHERE e.ssn = w.essn) a
WHERE cnt_f > cnt_m |
B*****g 发帖数: 34098 | 13 这个也行,我有包子吗?
group by
having sum > sum
【在 c*****d 的大作中提到】 : 第一题在oracle里还可以这么做 : SELECT ssn, lname : FROM (SELECT ssn, : lname, : pno, : SUM (DECODE (sex, 'f', 1, 0)) OVER (PARTITION BY pno) cnt_f, : SUM (DECODE (sex, 'm', 1, 0)) OVER (PARTITION BY pno) cnt_m : FROM employee e, works_on w : WHERE e.ssn = w.essn) a : WHERE cnt_f > cnt_m
|
c*****d 发帖数: 6045 | 14 你没写全,我理解是不行
【在 B*****g 的大作中提到】 : 这个也行,我有包子吗? : group by : having sum > sum
|
B*****g 发帖数: 34098 | 15 刚才没看题,不知行不行,现在看了,还真不行,不过你的sql可以简化成
SELECT ssn, lname
FROM (SELECT ssn,
lname,
pno,
SUM (DECODE (sex, 'm', 1, -1)) OVER (PARTITION BY pno) cnt
FROM employee e, works_on w
WHERE e.ssn = w.essn) a
WHERE cnt < 0
【在 c*****d 的大作中提到】 : 你没写全,我理解是不行
|
c*****d 发帖数: 6045 | 16 嗯,你这个简化的好
【在 B*****g 的大作中提到】 : 刚才没看题,不知行不行,现在看了,还真不行,不过你的sql可以简化成 : SELECT ssn, lname : FROM (SELECT ssn, : lname, : pno, : SUM (DECODE (sex, 'm', 1, -1)) OVER (PARTITION BY pno) cnt : FROM employee e, works_on w : WHERE e.ssn = w.essn) a : WHERE cnt < 0
|
i**w 发帖数: 883 | 17 搭车也问一个问题:
设计一个schema,用来保存社区里面的家庭成员信息:每个家庭有父母,可能有0..n个
子女。再写一个sql列出子女双全(至少有一个儿子和一个女儿)的夫妻名字。
schema我设计成如下,但sql没搞出来
Person:
---------
id
name
gender
---------
Family:
---------
id
wife_pid
husband_pid
---------
FamilyChild:
---------
family_id
child_pid |
B*****g 发帖数: 34098 | 18 我来授渔。
第一步先找出至少有一个儿子和一个女儿的家庭id
提示:用distinct
【在 i**w 的大作中提到】 : 搭车也问一个问题: : 设计一个schema,用来保存社区里面的家庭成员信息:每个家庭有父母,可能有0..n个 : 子女。再写一个sql列出子女双全(至少有一个儿子和一个女儿)的夫妻名字。 : schema我设计成如下,但sql没搞出来 : Person: : --------- : id : name : gender : ---------
|
i**w 发帖数: 883 | 19 先谢一个。
schema设计没有什么问题吧?
思路其实我知道,但当时就是没搞出来至少有一个儿子和一个女儿的家庭id。
后来搞出来了一个,就是看上去很丑陋。没想出来怎么利用上distinct
select f_id
from
(
SELECT f_id,
COUNT(1) cnt
FROM
(
SELECT fc.family_id as f_id, p.gender
FROM FamilyChild fc,
Person p
WHERE fc.child_pid = p.id
group by fc.family_id, p.gender
)
GROUP BY f_id
) where cnt > 1 |
c*****d 发帖数: 6045 | 20 提示2:SUM(DECODE (???)) OVER (PARTITION BY ???)
【在 B*****g 的大作中提到】 : 我来授渔。 : 第一步先找出至少有一个儿子和一个女儿的家庭id : 提示:用distinct
|
|
|
B*****g 发帖数: 34098 | 21 http://www.w3schools.com/sql/sql_func_count.asp
【在 i**w 的大作中提到】 : 先谢一个。 : schema设计没有什么问题吧? : 思路其实我知道,但当时就是没搞出来至少有一个儿子和一个女儿的家庭id。 : 后来搞出来了一个,就是看上去很丑陋。没想出来怎么利用上distinct : select f_id : from : ( : SELECT f_id, : COUNT(1) cnt : FROM
|
L*********i 发帖数: 649 | 22 先谢谢2位前辈的指点,
这2题的逻辑过程我是清楚的,
但苦于我因为没见过课本上或网站上有类似的写法,老师上课讲的例子也较简单;
我不知道如何把这几层的逻辑过程转化为SQL,
我想对于这2个问题,也许有好几种写法,我也会根据两位前辈的指点琢磨,如果有心
得,一定回来再向前辈请教。
再次感谢。 |
i**w 发帖数: 883 | 23 试了半天,这个算是差不多了吧?
SELECT f_id
FROM
(SELECT fc.family_id AS f_id,
COUNT(DISTINCT(p.gender)) AS cnt
FROM FamilyChild fc,
Person p
WHERE fc.child_pid = p.id
GROUP BY fc.family_id
)
WHERE cnt > 1
【在 B*****g 的大作中提到】 : http://www.w3schools.com/sql/sql_func_count.asp
|
i**w 发帖数: 883 | 24 谢谢,看了你之前回答的sql才知道还有这种用法,试着写了一个。不过sum(decode(??
?))的用法没想出来
SELECT DISTINCT f_id
FROM
(SELECT fc.family_id AS f_id,
COUNT(1) over (partition BY family_id) cnt
FROM FamilyChild fc,
Person p
WHERE fc.child_pid = p.id
GROUP BY fc.family_id,
p.gender
)
WHERE cnt > 1
【在 c*****d 的大作中提到】 : 提示2:SUM(DECODE (???)) OVER (PARTITION BY ???)
|
i**w 发帖数: 883 | 25 脑子真是短路了,更简捷的版本
SELECT fc.family_id AS f_id
FROM FamilyChild fc,
Person p
WHERE fc.child_pid = p.id
GROUP BY fc.family_id
having COUNT(DISTINCT(p.gender)) > 1 |
i**w 发帖数: 883 | 26 转帐完成
转给用户:Beijing,现金(伪币):100,收取手续费:1.00 |
i**w 发帖数: 883 | 27 转帐完成
转给用户:coolbid,现金(伪币):50,收取手续费:0.50 |
c*****d 发帖数: 6045 | 28 多谢包子
这个贴子我收获很大呀,嘿嘿
【在 i**w 的大作中提到】 : 转帐完成 : 转给用户:coolbid,现金(伪币):50,收取手续费:0.50
|
c*****d 发帖数: 6045 | 29 嗯,这个最简洁
【在 i**w 的大作中提到】 : 脑子真是短路了,更简捷的版本 : SELECT fc.family_id AS f_id : FROM FamilyChild fc, : Person p : WHERE fc.child_pid = p.id : GROUP BY fc.family_id : having COUNT(DISTINCT(p.gender)) > 1
|
n*******k 发帖数: 100 | 30 这题第一问having 可以这样用么?
SELECT lname, ssn
FROM employee, works_on
WHERE works_on.essn = employee.ssn
AND works_on.pno IN(
SELECT pno
FROM works_on as WA, employee
WHERE works_on.essn = employee.ssn AND sex = 'F'
GROUP BY WA.pno
HAVING COUNT(sex) > (
SELECT COUNT(sex) AS cntOfMaleInOneProject
FROM works_on as WB, employee
WHERE works_on.essn = employee.ssn AND sex = 'M' AND WA.pno = WB
.pno
GROUP BY WB.pno
)
); |
|
|
n*******k 发帖数: 100 | 31 Extra Credit:
select lname
from employee
where ssn in (
select superssn
from employee e1
where not exists (
(
select pnumber
from project
where plocation = 'Stafford'
)
except
(
select pno
from employee e2, works_on w
where e2.ssn = w.essn and sex = 'f' and e1.superssn = e2.ssn
)
)
) |
L*********i 发帖数: 649 | 32 I will run your sql later and keep updated, thanks for share !
I do enjoy "different ways of fishing" instead of just eat the fish ( "
Beijing" ).
Thanks again!
【在 n*******k 的大作中提到】 : 这题第一问having 可以这样用么? : SELECT lname, ssn : FROM employee, works_on : WHERE works_on.essn = employee.ssn : AND works_on.pno IN( : : SELECT pno : FROM works_on as WA, employee : WHERE works_on.essn = employee.ssn AND sex = 'F' : GROUP BY WA.pno
|
L*********i 发帖数: 649 | 33 Employee.Super_ssn is NOT good for this Extra Credit.
Mgr_ssn in Department should be used for this Extra Q.
I am not sure the 逻辑过程 of use of the Not exist & except in your sql,
能说一下你的逻辑过程么?
【在 n*******k 的大作中提到】 : Extra Credit: : select lname : from employee : where ssn in ( : select superssn : from employee e1 : where not exists ( : ( : select pnumber : from project
|
n*******k 发帖数: 100 | 34 集合B - 集合A == null (集合B except 集合A == null) 等价于
集合B 属于 集合A
集合B是所有位于 'Stafford'的项目
集合A是某个SSN,性别为女性参与的项目
而集合A要涵盖集合B。
http://ishare.iask.sina.com.cn/f/35908324.html
database system concepts 6th
P93-94
不是很确定。 |
L*********i 发帖数: 649 | 35 thans for sharing !
有没有一个comparator has the function of "include" ????
exists
(set A )
"Include"
(set B)
我臆想天开?
【在 n*******k 的大作中提到】 : 集合B - 集合A == null (集合B except 集合A == null) 等价于 : 集合B 属于 集合A : 集合B是所有位于 'Stafford'的项目 : 集合A是某个SSN,性别为女性参与的项目 : 而集合A要涵盖集合B。 : http://ishare.iask.sina.com.cn/f/35908324.html : database system concepts 6th : P93-94 : 不是很确定。
|
n*******k 发帖数: 100 | 36 没见过这种语法
【在 L*********i 的大作中提到】 : thans for sharing ! : 有没有一个comparator has the function of "include" ???? : exists : (set A ) : "Include" : (set B) : 我臆想天开?
|
c*******o 发帖数: 1722 | 37 kao, you use vim to write sql? //hand
【在 c*****d 的大作中提到】 : 刚才开会的时候生怕有人抢我包子 : haha,先来个笨方法,功能肯定能实现 : SELECT ssn, lname : FROM employee : WHERE ssn IN : (SELECT essn : FROM works_on : WHERE pno IN : (SELECT DISTINCT f.pno : FROM ( SELECT pno, COUNT (1) cnt
|
c*****d 发帖数: 6045 | 38 这都能被你们发现了
【在 c*******o 的大作中提到】 : kao, you use vim to write sql? //hand
|