Announcement

Collapse
No announcement yet.

Thảo luận về SQL

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Originally posted by 07520004 View Post
    Cái đó thì đúng, còn cái bài mà tớ quote thì chưa đúng

    Limit hình như mysql có M$ sql ko có thì phải. Còn oracle nó dùng unique thay cho distinct thì phải
    Tốt nhất mình chỉ nói ý tưởng, để các em nhỏ tự google, chứ mình tự viết khéo nó sai bét nhè ra
    uhm. Limit chỉ dùng cho mysql. MS Sql thì ko hỗ trợ mà thay vào đó là top. Unique 1 dạng constraint thoy.

    Tốt nhất là cần j thì google sẽ có. Quan trọng vẫn là ý tưởng để giải quyết bài toán

    Comment


    • #17
      Hãy hiện thực hóa ý tưởng bằng code hoặc câu lệnh rõ ràng.Vì:
      Bạn có thể tìm thấy cả ngàn ý tưởng trong hàng trăm ngàn cuốn sách về ý tưởng song hãy chứng minh rằng ý tưởng của bạn đúng và nó là ý tưởng có thể thực hiện được => Hãy đứa code hoặc câu lệnh đã thực hiện được ý tưởng đó để khẳng định chính ý tưởng đó.
      Cái câu này đọc được trên "congdongcviet" thấy nó viết cũng có ý nghĩa nên post lên cho mọi người đọc chơi.
      -------------------------------------
      Đời là bể khổ.
      Quay đầu là bờ ai ngờ là đại dương.
      ------------------------------------------------------------------------

      Comment


      • #18
        Originally posted by 09520396 View Post
        Hãy hiện thực hóa ý tưởng bằng code hoặc câu lệnh rõ ràng.Vì:

        Cái câu này đọc được trên "congdongcviet" thấy nó viết cũng có ý nghĩa nên post lên cho mọi người đọc chơi.
        Thấy nó ý nghĩa thì đi chỗ khác mà post, đừng có làm loãng topic! Nút tạo topic mới nằm thù lù trong mỗi forum ấy

        Comment


        • #19
          Trước tiên, mình xin cảm ơn các anh chị và các bạn UIT rất nhiều.
          Câu 1: Vậy chúng ta tìm ra 2 cách rồi, em đã thử với 2 cách đó:
          - Cách 1: Lấy điểm cao nhất trong những điểm không thuộc top 2 (dùng max và top 2): thk anh Đức Vinh, đưa ra cách này rất hay, nhưng còn lỗi ở chổ nếu có nhiều người điểm cao thứ 1, 2 thì sẽ sai ( VD 9, 9, 9, 8, 8, 6 , 4,... nó lấy 9 chứ không lấy 6). Bạn Văn Đồng sữa lại thì OK rồi. Cảm ơn bạn nhiều:
          SELECT *
          FROM sinhvien
          WHERE diem=(SELECT max(diem )
          FROM sinhvien
          WHERE diem NOT IN (SELECT DISTINCT top 2 diem FROM sinhvien
          ORDER BY diem DESC) )
          - Cách 2:Lấy điểm thấp nhất trong 3 điểm cao nhất (dùng top 1, top 3, order by): Bạn Văn Hùng cũng mắc lỗi giống anh Đức Vinh. Mình xin sửa lại một tí thôi:
          Select * from sinhvien
          where diem in (select top 1 diem from sinhvien where diem in
          (select distinct top 2 diem from sinhvien order by diem DESC) order by diem)
          - Em cũng sưu tầm được một số cách như sau, các anh chị xem giúp em có sai sót gì không:
          - Cách 3: Lấy điểm cao nhất trong những điểm nhỏ hơn 2 điểm đầu
          select max(Diem)
          from SINHVIEN
          where DIEM < all(SELECT TOP 2 DIEM
          FROM SINHVIEN
          GROUP BY DIEM
          ORDER BY DIEM DESC)
          (em chỉ cần lấy được cái điểm thứ 3 ra là được rồi)

          - Cách 4: Lấy điểm có 2 điểm khác lớn hơn nó
          select hocvien.mahv, HoTen, diem
          from phancong, hocvien
          where hocvien.mahv=PHANCONG.mahv
          and Diem in (select distinct Diem
          from PHANCONG A
          where (select count(distinct Diem)
          from PHANCONG B
          where A.Diem<B.Diem)=2)

          Originally posted by 10520597 View Post
          Còn câu 2 thì tớ không hiểu ý bạn nên bochan ^^
          Ý câu 2 là Thông kê theo từng phòng thi (đặc trưng với MaPh) số sv thi ở phòng đó và số SV có đi dự thi ( lúc đó CoMat=1). Nếu tách ra thành 2 câu query thì mình biết, nhưng để 2 yêu cầu gôm vào một thì... chịu.

          Comment


          • #20
            Originally posted by 10520437 View Post
            Ý câu 2 là Thông kê theo từng phòng thi (đặc trưng với MaPh) số sv thi ở phòng đó và số SV có đi dự thi ( lúc đó CoMat=1). Nếu tách ra thành 2 câu query thì mình biết, nhưng để 2 yêu cầu gôm vào một thì... chịu.
            Câu 2 có người giải trong post #3 rồi

            Comment


            • #21
              Originally posted by 07520004 View Post
              Câu 2 có người giải trong post #3 rồi
              Vậy câu 2 dùng "kết" hả anh, nhưng bài giải GROUP BY T1.MaSV mà đề yêu cầu là thống kê theo phòng chứ không phải theo sinh viên. Em có sữa lại GROUP BY T1.MaPh thì OK rồi, thk mấy anh nha:
              SELECT T1.MaPh, count(T1.MaSV) as SoSV, count(T2.MaSV) as SoCoMat
              FROM SINHVIEN T1 left join SINHVIEN T2 on T1.MaSV=T2.MaSV
              and T2.VangThiCS=0
              group by T1.MaPh

              Comment


              • #22
                Chắc nay thi xong hết rồi chứ nhỉ? Vào làm loãng không khí tí. Close topic thôi.

                Comment


                • #23
                  À em muốn mở rộng vấn đề tí mấy anh. Vẫn là câu 2:
                  Ta có các bảng sau:
                  THI(MaSV, MaPh, CoMat)
                  PHONG(MaPh, TenPh)
                  Bây giờ ta phải thống kế tương tự nhưng thêm cột tên phòng: (MaPh, TenPh, SoSV, SoCoMat)
                  Vậy phải làm sao hả mấy anh.

                  Comment


                  • #24
                    Em group by thêm tên phòng rồi select tên phòng thôi

                    Comment


                    • #25
                      Có phải như vầy không anh. Thnk anh nhiều!!!
                      SELECT T1.MaPh, TenPh,count(T1.MaSV) as SoSV, count(T2.MaSV) as SoCoMat
                      FROM (SINHVIEN T1 left join SINHVIEN T2 on T1.MaSV=T2.MaSV
                      and T2.VangThiCS=0) left join PHONG P on P.MaPh=T1.MaPh
                      group by T1.MaPh, TenPh

                      Comment


                      • #26
                        Mình có bảng A như sau:
                        ngay manv sbt tk sotien_no sotien_co
                        20110707 | 001 | 01 | 331 | 100.000 | 0
                        20110707 | 001 | 01 | 111 | 0 | 100.000
                        20110706 | 005 | 03 | 331 | 200.000 | 0
                        20110706 | 005 | 03 | 112 | 0 | 200.000
                        20110701 | 009 | 02 | 331 | 500.000 | 0
                        20110701 | 009 | 02 | 152 | 0 | 500.000

                        Bây giờ em chỉ muốn lấy sotien_no của 331 với tk có là 112 (tức lấy số tiền 200.000 của tk 331)thì dùng câu lệnh như thế nào? Cám ơn các bác trước!

                        Comment


                        • #27
                          SELECT T1.sotien_no
                          FROM taikhoan T1 JOIN taikhoan T2 ON T1.sbt = T2.sbt
                          WHERE T1.tk = 331 AND t2.tk = 112
                          Ghi nháp thế không biết có sai cú pháp chỗ nào không

                          Comment


                          • #28
                            Không đúng! Bị lỗi!

                            ORA-00933: SQL command not properly ended

                            Comment


                            • #29
                              Originally posted by nktkbnn View Post
                              Không đúng! Bị lỗi!

                              ORA-00933: SQL command not properly ended
                              Thử thêm ; ở cuối xem sao
                              SELECT T1.sotien_no
                              FROM taikhoan T1, taikhoan T2
                              WHERE T1.sbt = T2.sbt
                              AND T1.tk = 331 AND t2.tk = 112;

                              Comment


                              • #30
                                Nó ra kết quả không đúng bác ơi! Có bác nào có câu lệnh đúng không?

                                Comment

                                LHQC

                                Collapse
                                Working...
                                X