由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - 跪求高人指点:一道SQL题3/5个包子可以么?先谢了!
相关主题
t-sql chanllege 20关于in的效率
请问T-SQL中Group By之后怎么找到特定的recordSQL求助
help about SQL for ACCESS这个问题可以用SQL 实现吗?
[Mysql] how to return NULL count in group by query (转载)问个SQL的问题
新学mysql,请教一个时间估计想练习SQL, 求建议
厚脸皮的来请教一道很初级的题..请教高手,包子谢
服了,这就是我们QA和DBA的水平请问XML还有前途么?
问个sql的问题吧,搞不出来了. (转载)跟大家分享一下这些年我SQL SERVER DBA面试的一些重点
相关话题的讨论汇总
话题: select话题: where话题: pno话题: cnt话题: employee
进入Database版参与讨论
1 (共1页)
L*********i
发帖数: 649
1
company schema 见附件;
populated data 见附件;
question 4 & 5 见附件;
高人能不能指点一下呀,先谢了!
您要觉得包子不够多,您尽管要,我要有就给。
c*****d
发帖数: 6045
2
不要抢,这5个包子我吃定了
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
6
先去踢球了,晚上回来看看怎么改进
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

相关主题
厚脸皮的来请教一道很初级的题..关于in的效率
服了,这就是我们QA和DBA的水平SQL求助
问个sql的问题吧,搞不出来了. (转载)这个问题可以用SQL 实现吗?
进入Database版参与讨论
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

相关主题
问个SQL的问题请问XML还有前途么?
想练习SQL, 求建议跟大家分享一下这些年我SQL SERVER DBA面试的一些重点
请教高手,包子谢user_objects 与CAT view
进入Database版参与讨论
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
)
);
相关主题
question on JOIN on Oracle请问T-SQL中Group By之后怎么找到特定的record
dbi connect to oraclehelp about SQL for ACCESS
t-sql chanllege 20[Mysql] how to return NULL count in group by query (转载)
进入Database版参与讨论
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
1 (共1页)
进入Database版参与讨论
相关主题
跟大家分享一下这些年我SQL SERVER DBA面试的一些重点新学mysql,请教一个时间估计
user_objects 与CAT view厚脸皮的来请教一道很初级的题..
question on JOIN on Oracle服了,这就是我们QA和DBA的水平
dbi connect to oracle问个sql的问题吧,搞不出来了. (转载)
t-sql chanllege 20关于in的效率
请问T-SQL中Group By之后怎么找到特定的recordSQL求助
help about SQL for ACCESS这个问题可以用SQL 实现吗?
[Mysql] how to return NULL count in group by query (转载)问个SQL的问题
相关话题的讨论汇总
话题: select话题: where话题: pno话题: cnt话题: employee