Hiển thị kết quả từ 1 đến 8 / 8
  1. #1
    Tham gia
    19-02-2003
    Location
    Tp.HCM
    Bài viết
    13
    Like
    0
    Thanked 0 Times in 0 Posts

    Hoi ve loi ORA-00979: not a GROUP BY expression

    Minh co sql nhu sau:
    select a,b,c from table where table.a='xyz' group by a

    nhung khi chay bi loi: ORA-00979: not a GROUP BY expression

    Neu minh sua lai:
    select a,b,c from table where table.a='xyz' group by a,b,c
    hoac:
    select a,max(b),max(c) .......
    thi khong bao loi nhu vay nua

    Minh khong biet tai sao
    cac cao thu oracle chi giao voi.
    Quote Quote

  2. #2
    Tham gia
    06-02-2003
    Location
    vùng sâu vùng xa
    Bài viết
    549
    Like
    1
    Thanked 6 Times in 6 Posts
    Bạn nên đọc lại phần cơ bản về mệnh đề SELECT với GROUP BY !

    Một nguyên tắc quan trọng là tất cả các field trong SELECT list phải nằm trong GROUP BY ngoại trừ các field tham gia vào các phép tính trên group. Do đó:

    select a,b,c from table where table.a='xyz' group by a
    >> Sai vì b và c nằm trong SELECT list, không tham gia vào phép tính trên nhóm mà lại không nằm trong GROUP BY

    select a,b,c from table where table.a='xyz' group by a,b,c
    >>OK vì a,b,c đều nằm trong SELECT list và GROUP BY

    select a,max(b),max(c) from table where table.a='xyz' group by a
    >> OK ví lúc này b và c nằm trong SELECT list với toán tử trên nhóm MAX nên không cần xuất hiện trong GROUP BY

    Qui tắc này là của ngôn ngữ SQL chuẩn chứ không riêng gì Oracle.

    Hy vọng là bạn hiểu !

  3. #3
    Tham gia
    19-02-2003
    Location
    Tp.HCM
    Bài viết
    13
    Like
    0
    Thanked 0 Times in 0 Posts

    Cam on ban Xcabala

    Minh da hieu cach giai thich cua ban. Nhung van con thac mac :
    Neu minh phat bieu:
    select a,b,c from table where table.a='xyz' group by a

    Trong Visual fox 6 voi du lieu la DBF thi OK khong bao loi.

  4. #4
    Tham gia
    06-02-2003
    Location
    vùng sâu vùng xa
    Bài viết
    549
    Like
    1
    Thanked 6 Times in 6 Posts
    FOX thì mình không biết. Nhưng mà với các CSDL như SQL Server, Oracle, Access, DB2 thì nó sẽ báo lỗi.

  5. #5
    Tham gia
    19-02-2003
    Location
    Tp.HCM
    Bài viết
    13
    Like
    0
    Thanked 0 Times in 0 Posts

    Hoi them

    Vay co cach nao khac phuc khong.
    Boi vi neu liet ke het select list trong group thi dai qua
    con neu them max,min.. thi trong mot so truong hop lay du lieu
    bi sai ket qua.
    Xcabala giup voi

  6. #6
    Tham gia
    13-11-2002
    Location
    ha noi
    Bài viết
    84
    Like
    0
    Thanked 0 Times in 0 Posts
    Trong Oracle để lấy một khoảng dữ liệu nào đó có thể dùng cột giả rownum.
    Chẳng hạn
    select table_name from user_tables where
    rownum <10


    tuy nhiên nếu có mệnh để order by thì ta chỉ thu được sắp xếp trong rownum trở lại mà không phải là 20 giá trị đầu của kết quả sắp xếp.

  7. #7
    Tham gia
    16-07-2003
    Bài viết
    7
    Like
    0
    Thanked 0 Times in 0 Posts
    Using
    select table_name from user_tables where
    rownum <10

    is not the correct way to fix that problem. Try this:
    select distinct a, b, c from table
    where table.a = 'a'

    Use select distinct will return a distinct record for columns a, b, and c. And you are rite, if using max(b), max(c), only return the maximum values of each column b, and c. Other values associated with column a, but not a max value will not be return.
    Hope it will help you.

  8. #8
    Tham gia
    16-10-2003
    Bài viết
    7
    Like
    0
    Thanked 0 Times in 0 Posts
    bạn chỉ dùng được GROUP BY khi trong select list có các loại của Group function đi kèm như COUNT(), AVG(), MAX(), MIN().. và column mà bạn muốn display
    Còn nếu nói theo ý muốn của bạn thì cứ liệt kê trong select list thôi, đâu cần GROUP BY , dùng thêm ORDER BY thì được .

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •