PDA

View Full Version : Giúp đỡ câu lênh SQL



anhhungxdieu
02-05-2011, 01:34
Em đang làm một website bán điện thoại di động,nhưng làm đến mục xuất ra những sản phẩm bán chạy thì bí về truy vấn SQL,có pro nào biết về vần đề này xin giúp đỡ.Em định dựa vào bảng hóa đơn để tìm ra những sản phẩm bán chạy.Bảng hóa đơn của em gồm các trường hãng_điện_thoại,tên_điện_thoai,số_lư ng_bán)
Câu lệnh truy vấn em muốn làm là tập hợp tất cả những điện thoại cùng hãng vào một nhóm,sau đó tìm max(số_lượng_bán) cúa nhóm đó để đưa ra nhưng điẹn thoại bán chạy của từng hãng.Nếu bác nào biết về vấn đè này xin giúp đỡ em,em xin cảm ơn trước

bvnguyen
02-05-2011, 02:05
select * from hoa_don where hang_dien_thoai='nokia' and so_luong_banMAX(so_luong_ban)

anhhungxdieu
02-05-2011, 14:50
Bạn ơi,nếu vậy thì chỉ tìm được max(số lượng) cua nokia thôi,VD trong bảng của mình còn có các hãng khác như samsung,sony,LG v.v.. Cái mình muón lấy ở đây là max(số lượng) của samsung,max(số lượng) của LG,max(số lượng) của sony =>lấy các max(số lượng) của từng hãng

hoangnnm
02-05-2011, 15:18
Select hang_dien_thoai, max(so_luong_ban) as so_luong_ban
from hoa_don
group by hang_dien_thoai

megaownage
02-05-2011, 16:05
...lấy các max(số lượng) của từng hãng

max số lượng của từng hãng chỉ là max dơn hàng của từng hãng, con số này không cho biết món hàng ấy bán có chạy hay không.

Muốn biết món hàng có bán chạy hay không phải cộng tất cả các đơn hàng cùng tên_điện_thoại lại.

anhhungxdieu
02-05-2011, 20:55
Mình biết,nhưng đây mình đang truy vấn trong bảng đơn hàng,vì thế nên mình mới tìm max(số lượng bán) của từng hãng trong bảng đơn hàng.Cảm ơn các bạn đã trả lời giúp.Mình sẽ thử,hy vọng là ok

chip07
03-05-2011, 21:17
bạn có thể thử đoạn code sau, 2 câu truy vấn tương ứng với 2 trường hợp: Max(SoLuong) theo DonHang, và Max(SUM(SoLuong))



declare @DonHang table (HangDT nvarchar(50), TenDT nvarchar(50), SoLuong money)

insert into @DonHang (HangDT, TenDT, SoLuong)
values ('Nokia', 'N1', 11)
, ('Nokia', 'N2', 5)
, ('Nokia', 'N3', 9)
, ('Nokia', 'N1', 111)
, ('Nokia', 'N2', 15)
, ('Nokia', 'N3', 19)
, ('SamSung', 'S1', 2)
, ('SamSung', 'S2', 16)
, ('SamSung', 'S1', 12)
, ('SamSung', 'S2', 116)
, ('LG', 'L1', 3)
, ('LG', 'L1', 13)

SELECT ROW_NUMBER() OVER (PARTITION BY HangDT ORDER BY SoLuong DESC) STT, HangDT, TenDT, SoLuong
FROM @DonHang
ORDER BY STT, SoLuong DESC

SELECT ROW_NUMBER() OVER (PARTITION BY HangDT ORDER BY SoLuong DESC) STT, HangDT, TenDT, SoLuong
FROM
(
SELECT HangDT, TenDT, SUM(SoLuong) SoLuong
FROM @DonHang
GROUP BY HangDT, TenDT
) rs
ORDER BY STT, SoLuong DESC

anhhungxdieu
04-05-2011, 03:40
Bạn chip07 có thể giải thích giúp mình câu truy vấn của bạn được không.Minh không hiểu rõ lắm.Thanks.

chip07
04-05-2011, 17:47
ay, khả năng mô phạm của mình kém lắm, hok bít giải thích thế nào.
mình viết code chi tiết như vậy, cậu chỉ cần copy & paste vào rồi chạy thử, nhìn kết quả xuất ra là cậu hiểu ngay ấy mà.

ừa, trong đây mình dùng hàm ROW_NUMBER() với PARTITION BY đề nhóm Hãng, cậu có thể tìm hiểu thêm về hàm này ở link dưới đây, rất chi tiết, dễ hiểu:

http://hp-aptech.edu.vn/hpa/programming/archive/2010/12/22/ranking-trong-sql-server-2005.aspx

nếu vẫn còn khúc mắc thì thảo luận típ nha (^_^)

tronglinh89
16-11-2011, 16:46
SELECT top 10 TENSP, SUM(SOLUONG) AS TONG
FROM SP,CHITIETDATHANG
WHERE SP.MASP = CHITIETDATHANG.MASP
GROUP BY TENSP
ORDER BY SUM(SOLUONG) DESC

// CÂU NÀY TRUY VẤN 10 SP BÁN CHẠY NHẤT
// CHỈ CẦN XẮP XẾP THEO TỔNG SỐ LƯỢNG BÁN RÙI LẤY 10 CÁI TRÊN CÙNG LÀ CÓ 10 SP HOT NHẤT RÙI :D

megaownage
16-11-2011, 23:06
SELECT top 10 TENSP, SUM(SOLUONG) AS TONG
FROM SP,CHITIETDATHANG
WHERE SP.MASP = CHITIETDATHANG.MASP
GROUP BY TENSP
ORDER BY SUM(SOLUONG) DESC

// CÂU NÀY TRUY VẤN 10 SP BÁN CHẠY NHẤT
// CHỈ CẦN XẮP XẾP THEO TỔNG SỐ LƯỢNG BÁN RÙI LẤY 10 CÁI TRÊN CÙNG LÀ CÓ 10 SP HOT NHẤT RÙI :D

Bài đã giải cả nửa năm rồi, tự dưng lôi lên nhét thêm câu trả lời... trật lất