本帖最后由 bulcor 于 2012-05-09 20:18:56 编辑

解决方案 »

  1.   

    具体内容没怎么看  分组计算要将单个字段都列出来 才能计算其他函数  2个类型差不多--1
    SELECT givenname, familyname, feespaid, 185-feespaid as "Fees", sum(feespaid), sum(185-feespaid)
    FROM MEMBER
    WHERE Registrationnum IS NOT NULL;
    GROUP BY givenname, familyname,feespaid;--2
    select week as Weeks, COUNT(DISTINCT home)+COUNT(DISTINCT away)as Team  
    FROM fixture
    WHERE home<>away
    GROUP BY week 
    ORDER BY week
      

  2.   

    第一题还是报错: unknown command begin group by...
    第二题可以,我后来用改了一下也可以
    代码是这样的:
    SELECT Week, Teamnum,
    CASE
    WHEN Teamnum=4
    THEN 'True'
    ELSE 'False'
     END "Check"
    FROM
    (SELECT week, COUNT(DISTINCT home)+COUNT(DISTINCT away) as Teamnum 
    FROM fixture
    WHERE home<>away
    GROUP BY week
    ORDER BY week);
    没有你的简洁,谢谢
      

  3.   

    185-feespaid 这个是默认的赋值吧? 加引号还报错么SELECT givenname, familyname, feespaid,'185-feespaid' as Fees, sum(feespaid), sum(185-feespaid)
    FROM MEMBER
    WHERE Registrationnum IS NOT NULL;
    GROUP BY givenname, familyname,feespaid;
      

  4.   


      只是改了下from里面的语句 上面没问题
      

  5.   

    加了以后报错:not a sing-group group function不知道为什么
      

  6.   

    SELECT givenname, familyname, feespaid, 185-feespaid as "Fees", sum(feespaid)over(partition by familyname), sum(185-feespaid)over(partition by familyname)
    FROM MEMBER
    WHERE Registrationnum IS NOT NULL;
    可能意图还是理解错误,看着改吧
    第二道题,实际上并没有要求主场和客场的场次必须对等吧?
    按照题目说的,只要每个星期,每个球队有且只有一场比赛,就ok了
    with t1 as (select distinct home team from fixture),
      t2 as (select distinct week from fixture),
      t3 as (select week,home team from fixture union all select week,away from fixture)
    select team,max(cnt) as maxcnt,min(cnt) as mincnt from(
    select t.team,t.week,count(t3.team) cnt
    from (select * from t1,t2) t,t3
    where t.team=t3.team(+)
      and t.week=t3.week(+)
    group by t.team,t.week
    )
    group by team
      

  7.   


    恩, 第一题后来我用NVL2函数做出来了
    第二题我的算法要用到两个表,这里只列了检测每星期有一场比赛的那个表。
    不过这个代码写的真好,我是用DISTINCT解决的有且只有一场的问题的,学习了
      

  8.   


    1.
    SELECT givenname,
           familyname,
           feespaid,
           185 - feespaid as "Fees",
           sum(feespaid),
           sum(185 - feespaid)
      FROM MEMBER
     WHERE Registrationnum IS NOT NULL;
    GROUP BY givenname, familyname,feespaid;2.
    SELECT Weeks,
           Team,
           CASE
             WHEN Team = 4 THEN
              'True'
             ELSE
              'False'
           END "Check"
      FROM (SELECT x as Weeks, y as Team
              from (select week as x,
                           COUNT(DISTINCT home) + COUNT(DISTINCT away) as y
                      FROM fixture
                     WHERE home <> away
                     group by week)
             GROUP BY x,y
             ORDER BY x);
    自已试下