Announcement

Collapse
No announcement yet.

Bài tập SQL khó cần người giải đây !

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

  • Bài tập SQL khó cần người giải đây !

    Có bảng sau : SANPHAM(TENSP,DVT,NUOCSX,GIA)
    với câu hỏi: Viết SQL với mỗi nước sản xuất, tìm sản phẩm (MASP,TENSP) có giá bán cao nhất.

    Rất nhiều vấn đề quanh câu hỏi này !?

  • #2
    Từ bảng SANPHAM, truy vấn danh sách các nước và giá lớn nhất của từng nước thành một bảng tạm, rồi kết bảng tạm này với bảng SANPHAM
    Code:
    SELECT SP.NUOCSX, SP.MASP, SP.TENSP 
    FROM dbo.SANPHAM SP, (SELECT NUOCSX, MAX(GIA) AS MAXGIA FROM dbo.SANPHAM GROUP BY NUOCSX) T
    WHERE SP.NUOCSX=T.NUOCSX AND SP.GIA = T.MAXGIA
    Last edited by 08520467; 19-12-2011, 22:57.

    Comment


    • #3
      Cách giải trên rất hay (và khuyến khích dùng) nhưng phải xài bảng tạm, mình có làm cách khác không dùng bảng tạm nhưng có vẻ sẽ chạy chậm hơn cái trên --> (không khuyến khích dùng :x).

      Code:
      SELECT SP.NUOCSX, SP.MASP, SP.TENSP
      FROM SANPHAM SP
      WHERE NOT EXISTS (
      	SELECT SP2.MASP
      	FROM SANPHAM SP2
      	WHERE ((SP2.NUOCSX = SP.NUOCSX) AND (SP2.GIA > SP.GIA))
      	)

      Comment


      • #4
        Câu làm bảng tạm mình hiểu rồi, rất cảm ơn bạn 08520467 . À bạn 10520272 ! Bạn có thể giải thích rõ hơn cho mình chỗ giải not exists của bạn được không !? Cảm ơn bạn rất nhiều

        Comment


        • #5
          Originally posted by 10520272 View Post
          Cách giải trên rất hay (và khuyến khích dùng) nhưng phải xài bảng tạm, mình có làm cách khác không dùng bảng tạm nhưng có vẻ sẽ chạy chậm hơn cái trên --> (không khuyến khích dùng :x).

          Code:
          SELECT SP.NUOCSX, SP.MASP, SP.TENSP
          FROM SANPHAM SP
          WHERE NOT EXISTS (
          	SELECT SP2.MASP
          	FROM SANPHAM SP2
          	WHERE ((SP2.NUOCSX = SP.NUOCSX) AND (SP2.GIA > SP.GIA))
          	)
          Originally posted by 10520430 View Post
          Câu làm bảng tạm mình hiểu rồi, rất cảm ơn bạn 08520467 . À bạn 10520272 ! Bạn có thể giải thích rõ hơn cho mình chỗ giải not exists của bạn được không !? Cảm ơn bạn rất nhiều
          câu truy vấn dùng not exists có thể mô tả bằng lời như sau : chọn ra những sản phẩm (nước sx, mã sp, tên sp) mà không có sản phẩm nào cùng nước sx với nó mà có giá lớn hơn nó.

          Comment


          • #6
            Vậy mình có thể dùng not in thay thế cho not exists được chứ ?

            Comment


            • #7
              Được chứ, nhưng chắc sẽ khó hơn dùng NOT EXISTS, bạn thử xem, cũng là một cách làm mới

              Comment


              • #8
                Mình nghĩ cách này hay hơn nè
                ;WITH TempTable(TenSP,DVT,NUOCSX,GIA,ThuTu)
                AS
                (
                SELECT TenSanPham,DVT,NUOCSX,GIA,DENSE_RANK() OVER(PARTITION BY TenSanPham ORDER BY GIA) as ThuTu FROM SANPHAM
                )
                SELECT * FROM TempTable WHERE ThuTu=1 :salute:

                Comment

                LHQC

                Collapse
                Working...
                X