k***n 发帖数: 997 | 1 1, 有一个客户_good_.dbo.transactions, 其中包括
acct: unique customer identifier, purchdate: date when purchase occurred,
purchasemt: purchase amount
要求:select all acct with first purchase happened in 2012 and his total
purchase amount > 250$
2, 还是这个table, find the proportion of customers that made more than one
purchases in 2012 fiscal year. return a table where col1 is number of
customers that made more than one purchases in 2012 fiscal year, col2 total
number of customers ever purchased from us, col3 show percentage.
(1) fiscal year starts on 8/1
(2) only select customers with purchase amount > 0.0
下面的解法对么:
1。
select acct, min(purchasedate) as firstgd, sum(purchasemt) as totalg
into _good_.dbo.temp
from _good_.dbo.transactions
group on acct
select acct
from _good_.dbo.temp
where (firstgd between #1/1/2012# and #12/31/2012#) and totalg >= 250
2.
select acct
into _good_.dbo.temp1
from _good_.dbo.transactions
where purchasemt > 0 and purchasedate between #9/1/2011# and #8/31/2012#;
select acct, count(purchasedate) as freq
into _good_.dbo.temp2
from _good_.dbo.temp1
group on acct ;
select acct,freq, count(*) as totalcm
into _good_.dbo.temp3
from _good_.dbo.temp2 ;
select count(acct) as tarcm, totalcm
into _good_.dbo.temp4
from _good_.dbo.temp3
where freq > 1;
select tarcm, totalcm, tarcm*100.0/totalcm as percent
from _good_.dbo.temp4 ;
本人初学数据库,现学现卖的code让大牛们见笑了 | k***n 发帖数: 997 | | B*****g 发帖数: 34098 | 3 90%以上的数据库版SQL问题可以用partition by解决
【在 k***n 的大作中提到】 : 1, 有一个客户_good_.dbo.transactions, 其中包括 : acct: unique customer identifier, purchdate: date when purchase occurred, : purchasemt: purchase amount : 要求:select all acct with first purchase happened in 2012 and his total : purchase amount > 250$ : 2, 还是这个table, find the proportion of customers that made more than one : purchases in 2012 fiscal year. return a table where col1 is number of : customers that made more than one purchases in 2012 fiscal year, col2 total : number of customers ever purchased from us, col3 show percentage. : (1) fiscal year starts on 8/1
| l******n 发帖数: 9344 | 4 你翻来覆去就这一句话...
【在 B*****g 的大作中提到】 : 90%以上的数据库版SQL问题可以用partition by解决
| B*****g 发帖数: 34098 | 5 SQL题翻来覆去就那一个解法
【在 l******n 的大作中提到】 : 你翻来覆去就这一句话...
| k***n 发帖数: 997 | 6 Partition by都没包含在我学习的tutorial里,用简单方法做呢?
【在 B*****g 的大作中提到】 : SQL题翻来覆去就那一个解法
| B*****g 发帖数: 34098 | 7 google一下having的用法
【在 k***n 的大作中提到】 : Partition by都没包含在我学习的tutorial里,用简单方法做呢?
| k***n 发帖数: 997 | 8
我学过having,但是想不到这道题是要用到它。
看来光看教程距离搞定sql还远
【在 B*****g 的大作中提到】 : google一下having的用法
| B*****g 发帖数: 34098 | 9 多练
【在 k***n 的大作中提到】 : : 我学过having,但是想不到这道题是要用到它。 : 看来光看教程距离搞定sql还远
| s********e 发帖数: 893 | 10 看了历史贴,Beijing从来都是授渔,偶尔授鱼。我现在经常使用partition by就是1个
月前Beijing授渔所得。
我觉得你那几个query都没问题,只是完全可以融合成一个。比如第二问,
我用自己的table在Oracle试了一下,用了 union 两个query,然后sum。
大体框架就是
select sum(aa) , sum(bb), sum(aa)/sum(bb)
from
select count(count(acct)) aa,0 bb
from ttt
where XXX
group by XX having count(*) XX
union
select 0, count(count(acct))
where XXX
group by XX having count(*) XX
一个query就可以得到你想要的结果。 | k***n 发帖数: 997 | 11 我刚装了mysql来run我的code发现run不了,也不知道怎么调
其它数据库比如oracle, ms sql server下面语法也不一样
应该用那一个环境学习呢?
【在 B*****g 的大作中提到】 : 多练
| k***n 发帖数: 997 | 12 Thanks a lot.
当时我忘了subquery怎么写,网上google了一下找到了ms sql和mysql的不同版本,时
间紧没办法仔细看,也就没用。
【在 s********e 的大作中提到】 : 看了历史贴,Beijing从来都是授渔,偶尔授鱼。我现在经常使用partition by就是1个 : 月前Beijing授渔所得。 : 我觉得你那几个query都没问题,只是完全可以融合成一个。比如第二问, : 我用自己的table在Oracle试了一下,用了 union 两个query,然后sum。 : 大体框架就是 : select sum(aa) , sum(bb), sum(aa)/sum(bb) : from : select count(count(acct)) aa,0 bb : from ttt : where XXX
| B*****g 发帖数: 34098 | 13 为啥是union?union all行吗?
为啥要合并,一个group by能解决不?
【在 s********e 的大作中提到】 : 看了历史贴,Beijing从来都是授渔,偶尔授鱼。我现在经常使用partition by就是1个 : 月前Beijing授渔所得。 : 我觉得你那几个query都没问题,只是完全可以融合成一个。比如第二问, : 我用自己的table在Oracle试了一下,用了 union 两个query,然后sum。 : 大体框架就是 : select sum(aa) , sum(bb), sum(aa)/sum(bb) : from : select count(count(acct)) aa,0 bb : from ttt : where XXX
| k***n 发帖数: 997 | 14 update:被拒了,原因是我写的两题code都无法得到正确的resultset, 且有syntax
error
果然被鄙视了
【在 k***n 的大作中提到】 : 1, 有一个客户_good_.dbo.transactions, 其中包括 : acct: unique customer identifier, purchdate: date when purchase occurred, : purchasemt: purchase amount : 要求:select all acct with first purchase happened in 2012 and his total : purchase amount > 250$ : 2, 还是这个table, find the proportion of customers that made more than one : purchases in 2012 fiscal year. return a table where col1 is number of : customers that made more than one purchases in 2012 fiscal year, col2 total : number of customers ever purchased from us, col3 show percentage. : (1) fiscal year starts on 8/1
|
|