Cảm ơn anh vì bài giảng rất hay ạ! Đáp án bài tập: SELECT o.OrderID, c.CompanyName, c.CustomerID FROM [dbo].[Customers] c INNER JOIN [dbo].[Orders] o ON c.CustomerID = o.CustomerID INNER JOIN [dbo].[Order Details] od ON od.OrderID = o.OrderID GROUP BY o.OrderID, c.CompanyName, c.CustomerID HAVING SUM(od.Quantity*od.UnitPrice) = (SELECT TOP 1 SUM(od.Quantity*od.UnitPrice) AS Total FROM [dbo].[Order Details] od GROUP BY od.OrderID ORDER BY Total DESC )
31/03/2024 Em xin cảm ơn thầy ạ. Sau đây là phần bài tập: --Lấy thông tin về các khách hàng có tổng giá trị đơn hàng lớn nhất select * from Customers; select * from [Order Details]; select * from Orders; select c.ContactName, o.OrderID, (Select Sum(od.Quantity* od.UnitPrice) From "Order Details" od Where o.OrderID = od.OrderID) as "Total" from Orders as o inner join Customers c on o.CustomerID = c.CustomerID Group by c.ContactName, o.OrderID Order by "Total" desc; Xin cảm ơn thầy và mọi người đã đọc ạ! Mình học và có làm file theo từng bài của thầy luôn. Có ghi chép lại và làm lại những phần ghi chép đó thành 1 pp cho lúc cần dễ tra cứu, xem lại. Lúc luyện tập có thể mở lại xem cú pháp hay là cách sử dụng câu lệnh. Ai có duyên đọc được nếu cần thì cmt mình gửi cho nha.
Chào bạn, thật tình cờ khi đọc được cmt này. Nếu không phiền, bạn có thể chia sẻ cho mình những ghi chép của bạn được không? Mình xin cảm ơn bạn rất nhiều. Chúc bạn nhiều thành công trong công việc! Em cũng xin cảm ơn thầy vì những bài học bổ ích!
Mình xin góp ý 1 chút nhé. Bạn chưa đáp ứng được hết yêu cầu của đề bài ạ: 1. Bạn chưa đưa ra được khách hàng có tổng giá trị đơn hàng lớn nhất. Bạn mới chỉ sắp xếp theo thứ tự từ cao xuống thấp thôi. 2. Theo phần code của bạn, bạn mới chỉ tìm được giá trị của đơn hàng theo từng "OrderID". Nhưng theo mình hiểu, đề bài cần lọc ra giá trị đơn hàng theo từng "khách hàng". Mà 1 "khách hàng" có thể có nhiều "Order ID". Đó là ý kiến của mình, có gì bạn cứ tranh luận nhé, để cùng nhau học tốt hơn. Cảm ơn vì đã đọc!
Em gửi bài làm bài cuối, cảm ơn thầy SELECT c.* FROM Orders as o INNER JOIN Customers as c ON o.CustomerID=c.CustomerID WHERE o.OrderID IN (SELECT OrderID FROM (SELECT OrderID, SUM(UnitPrice*Quantity) AS Order_TotalPrice FROM [Order Details] GROUP BY OrderID) as temp WHERE temp.Order_TotalPrice= (SELECT Max(temp.Order_TotalPrice) FROM (SELECT OrderID, SUM(UnitPrice*Quantity) AS Order_TotalPrice FROM [Order Details] GROUP BY OrderID) as temp));
@@CoffeeTran18 bài bạn làm chưa đúng đề bài, đề bài là tìm KH có tổng giá trị đơn hàng lớn nhất chứ ko phải tìm KH sở hữu 1 đơn hàng có value cao nhất.
@@TrinhHuỳnhThịTú-b7v bài này k nói rõ là tổng của 1 đơn hàng hay các đơn hàng vì 1 khách hàng có thể có nhiều đơn hàng nma đọc tổng giá trị đơn hàng thì có thể hiểu được là tổng của 1 đơn hàng tại một thời điểm mà khách hành đặt
em cám ơn thầy vì đã bỏ công sức làm những bài giảng ạ em xin gửi bài tập --bt1: lấy thông tin về các khách hàng có tổng giá trị đơn hàng lớn nhất select (od.Quantity*od.UnitPrice) as TotalPrice from [Order Details] od order by TotalPrice desc ; --> kiểm tra giá trị lớn nhất select c.*, (od.Quantity*od.UnitPrice) as TotalPrice from [Customers] c join [Orders] o on c.CustomerID = o.CustomerID join [Order Details] od on od.OrderID = o.OrderID where (od.Quantity*od.UnitPrice) = (select max(od.Quantity*od.UnitPrice) from [Order Details] od) ;
16/04/2024 Cảm ơn anh, em xin phép đóng góp phần lời giải ở bài tập: -- Lấy thông tin về các khách hàng có tổng giá trị đơn hàng lớn nhất SELECT c.* FROM [dbo].[Customers] c FULL JOIN [dbo].[Orders] o ON c.CustomerID = o.CustomerID Full JOIN [dbo].[Order Details] od ON o.OrderID = od.OrderID WHERE ([UnitPrice]*[Quantity]) IN ( SELECT MAX([UnitPrice]*[Quantity]) AS [TotalOrdersDetails] FROM [dbo].[Order Details])
BÀI TẬP: select c.* from Customers c inner join Orders o on c.CustomerID = o.CustomerID inner join [Order Details] od on od.OrderID = o.OrderID where (od.Quantity * od.UnitPrice) = ( select max (od.Quantity * od.UnitPrice) from [Order Details] od );
Em xin cảm ơn thầy về những bài ôn tập như vầy. Mong thầy sẽ ra những bài học chất lượng ạ. Em xin gửi đáp án cho câu hỏi cuối video: SELECT DISTINCT c.* FROM dbo.Customers AS c JOIN dbo.Orders AS o ON c.CustomerID = o.CustomerID WHERE c.CustomerID = (SELECT o.CustomerID FROM dbo.Orders AS o WHERE o.OrderID IN (SELECT TOP 1 od.OrderID FROM dbo.[Order Details] AS od GROUP BY od.OrderID ORDER BY SUM(Quantity*UnitPrice) DESC) ) ;
--Bài 29. Bài tập Sub Query - truy vấn con, truy vấn lồng --Lấy thông tin về khách hàng có tổng giá trị 1 đơn hàng lớn nhất select * from [dbo].[Customers]as c join [dbo].[Orders] as o on c.CustomerID=o.CustomerID where o.OrderID=(select top 1 od.OrderID from[dbo].[Order Details] as od group by od.OrderID order by sum([UnitPrice]*[Quantity]) desc ) --Lấy thông tin của khách hàng có tổng giá trị các đơn hàng là lớn nhất select * from [dbo].[Customers] as c where [CustomerID]=( select top 1 o.CustomerID from [dbo].[Orders] as o ,[dbo].[Order Details] as od group by o.CustomerID order by sum(od.Quantity*od.UnitPrice) desc )
Em cảm ơn ạ, Câu trả lời: select top 1 c.[CustomerID],c.[CompanyName] from [dbo].[Orders] as o inner join [dbo].[Customers] as c on o.[CustomerID]=c.[CustomerID] inner join [dbo].[Order Details] as od on od.[OrderID]=o.[OrderID] where [UnitPrice]*[Quantity]=( select max([UnitPrice]*[Quantity]) from [dbo].[Order Details] );
Em cảm ơn anh rất nhiều ạ, Đáp án bài tập: SELECT C.*,OD.UnitPrice*OD.Quantity AS [SUMOrderID max] FROM [dbo].[Order Details] OD JOIN [dbo].[Orders] O ON O.OrderID = OD.OrderID JOIN [dbo].[Customers] C ON O.CustomerID = C.CustomerID WHERE OD.Quantity*OD.UnitPrice = ( SELECT MAX( OD.Quantity*OD.UnitPrice) AS [SUMOrderID max] FROM[dbo].[Order Details] OD
); -- RUN RA ĐƯỢC 2 KHÁCH HÀNG CÓ TỔNG GIÁ TRỊ ĐƠN HÀNG LỚN NHẤT LÀ 15810 anh có làm video nào giới thiệu về Execution plan ko ạ
Cám ơn thầy. Em gửi bài tập ạ SELECT * FROM [dbo].[Customers] c WHERE c.CustomerID = ( SELECT TOP 1 c.CustomerID FROM [dbo].[Customers] c, [dbo].[Order Details] od, [dbo].[Orders] o WHERE o.CustomerID = c.CustomerID GROUP BY c.CustomerID, od.Quantity, od.UnitPrice ORDER BY (od.Quantity * od.UnitPrice) DESC );
bài giải cho bài tập trên select top 1 c.CustomerID, c.CompanyName, [tổng giá trị đơn hàng] from [dbo].[Customers] c inner join ( select o.[OrderID], o.CustomerID, sum(od.[UnitPrice]*od.[Quantity]) as [tổng giá trị đơn hàng] from [dbo].[Orders] o inner join [dbo].[Order Details] od on o.OrderID = od.OrderID group by o.[OrderID], o.CustomerID ) as OrderTotals on c.CustomerID = OrderTotals.CustomerID order by [tổng giá trị đơn hàng] desc
--Bai lam cua em (tim duoc 2 record ) select c.* from Orders o join Customers c on o.CustomerID = c.CustomerID where o.OrderID in ( select OrderID from [Order Details] where (UnitPrice * Quantity) = (select max(UnitPrice*Quantity) from [Order Details]))
em gửi select c.CustomerID, c.ContactName, o.OrderID from Customers as c inner join orders as o on c.CustomerID=o.CustomerID where o.OrderID=( select top 1 orderID from [Order Details] group by orderID order by sum(UnitPrice*Quantity) desc ) tầm này mỗi người nghĩ 1 kiểu để giải bài này, đọc kết quả mà chỉ biết paste vô, giống thì ok sai thì kệ vì lú não
cảm ơn vì đóng góp của thầy ạ! câu trả lời: select TOP 1 CustomerID, SUM ( [UnitPrice]*[Quantity]) Order_Value FROM (SELECT CustomerID,[UnitPrice],[Quantity] FROM [dbo].[Order Details] od join ( SELECT [OrderID], ( SELECT CustomerID FROM Customers c WHERE o.CustomerID=c.CustomerID ) CustomerID FROM [Orders] o ) db on od.OrderID=db.[OrderID] ) abc Group BY CustomerID Order BY Order_Value DESC
Bài tập (Công nhận bài lần này khó thật sự nhưng khó là ở cách viết code cơ) SELECT c.* FROM Orders AS o INNER JOIN Customers AS c ON o.CustomerID = c.CustomerID WHERE o.OrderID IN ( SELECT [Total Price Table].OrderID FROM ( SELECT od.OrderID, SUM(UnitPrice * Quantity * 1 - Discount) AS [Total Price] FROM [Order Details] AS od GROUP BY od.OrderID ) AS [Total Price Table] WHERE [Total Price Table].[Total Price] = ( SELECT MAX([Total Price Table].[Total Price]) AS [Max Price] FROM ( SELECT od.OrderID, SUM(UnitPrice * Quantity * 1 - Discount) AS [Total Price] FROM [Order Details] AS od GROUP BY od.OrderID ) AS [Total Price Table] ) )
Đáp án "Lấy thông tin về các khách hàng có tổng giá trị đơn hàng lớn nhất" select c.* from Orders as o inner join Customers as c on c.CustomerID = o.CustomerID inner join [Order Details] as od on od.OrderID = o.OrderID where (od.Quantity*od.UnitPrice) in ( select MAX(Quantity*UnitPrice) as [Total Order] from [Order Details] ) 2 rows nhé mọi người
Double Check xem gía trị đơn hàng lớn nhất : select top 3 pp.OrderID,(Quantity*UnitPrice) as [Total Order], c.CompanyName, c.ContactName from [Order Details] as pp, Orders as o, Customers as c where pp.OrderID = o.OrderID AND c.CustomerID = o.CustomerID order by (Quantity*UnitPrice) desc
Cảm ơn đóng góp của anh. Em xin gửi đáp án ạ select * from Customers c join Orders o on o.CustomerID = c.CustomerID where o.OrderID in( select top 1 OrderID from [Order Details] group by OrderID order by sum(UnitPrice * Quantity) desc );
Em xin trả lời đáp án bài tập cuối VD là : SELECT c.CustomerID, c.CompanyName, UnitPrice*Quantity AS [Money] FROM [dbo].[Customers] c FULL JOIN [dbo].[Orders] o ON c.CustomerID = o.CustomerID FULL JOIN [dbo].[Order Details] od ON o.OrderID = od.OrderID WHERE UnitPrice*Quantity IN ( SELECT MAX(UnitPrice*Quantity) FROM [dbo].[Order Details] )
Giải bài tập: SELECT c.*, ([UnitPrice]*[Quantity]) as [SUM] FROM [dbo].[Customers] as c INNER JOIN [dbo].[Orders] as o ON o.CustomerID= c.CustomerID INner join [dbo].[Order Details] as od ON od.OrderID = o.OrderID where ([UnitPrice]*[Quantity]) = ( SELECT MAX([UnitPrice]*[Quantity]) FROM [dbo].[Order Details] )
bài làm select * from [dbo].[Customers] c where c.CustomerID in (select top 1 c.CustomerID from [dbo].[Order Details] od join [dbo].[Orders] o on od.OrderID =o.OrderID join [dbo].[Customers] c on o.CustomerID =c.CustomerID group by c.CustomerID order by sum(od.[UnitPrice]*od.[Quantity]) desc)
Thưa thầy, với câu hỏi : lấy thông tin về các đh và tên các sp thuộc các đơn hàng chưa dc giao, thì em thấy làm như thế này cũng ra kết quả 73 row SELECT p.ProductName, * FROM Orders o INNER JOIN [Order Details] d ON d.OrderID=o.OrderID INNER JOIN Products p ON p.ProductID=d.ProductID WHERE o.ShippedDate is null Tại vì, khi dùng INNER JOIN, thì các bảng tự động liên kết các thông tin lai với nhau, nên khi dặt điều kiện WHERE thì cứ hỏi thẳng luôn, nên khi thấy Sub Query ở WHERE, em cảm thấy hơi rối, em xin cảm ơn!
Biết ơn anh vì những bài học SELECT o.OrderID, o.CustomerID, c.ContactName, SUM(od.Quantity * od.UnitPrice) AS 'Total' FROM dbo.Orders o INNER JOIN dbo.Customers c ON o.CustomerID = c.CustomerID INNER JOIN dbo.[Order Details] od ON o.OrderID = od.OrderID GROUP BY o.OrderID, o.CustomerID, c.ContactName HAVING SUM(od.Quantity * od.UnitPrice) = ( SELECT MAX(total_amount) AS max_order_value FROM ( SELECT SUM(od.Quantity * od.UnitPrice) as total_amount FROM [Order Details] od GROUP BY od.OrderID ) AS order_values);
em xin giải bài tập: SELECT *, od.Quantity*od.UnitPrice AS TotalPrice FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID INNER JOIN [Order Details] od ON o.OrderID = od.OrderID WHERE od.Quantity*od.UnitPrice = ( SELECT MAX(od.Quantity*od.UnitPrice) FROM [Order Details] od );
PHẦN NÀY PHẢI DÙNG CREATE VIEW NHÉ . VÌ NẾU LẤY TOP 1 sẽ có trường hợp hai người bỏ ra Tổng số tiền tương tự nhau mua hàng . Thì chỉ lấy được duy nhất một người . Kết quả sẽ bị sai vì thiếu mất một người
Dạ em xin phép gửi bài giải: SELECT o.OrderID, c.ContactName, SUM (od.UnitPrice*od.Quantity) [Total] FROM Customers [c] INNER JOIN Orders [o] ON o.CustomerID = c.CustomerID INNER JOIN [Order Details] [od] ON od.OrderID = o.OrderID GROUP BY o.OrderID, c.ContactName HAVING SUM (od.UnitPrice*od.Quantity) = ( SELECT MAX([Total MAX]) FROM (SELECT SUM(od.UnitPrice*od.Quantity) AS [Total MAX] FROM [Order Details] od GROUP BY od.OrderID ) AS [Valune])
-- Lay thong tin va cac khach hang co tong gia tri don hang lon nhat SELECT c.* FROM [dbo].[Customers] AS c WHERE c.CustomerID = (SELECT o.CustomerID FROM [dbo].[Orders] AS o WHERE o.OrderID = (SELECT od.[OrderID] FROM [dbo].[Order Details] AS od GROUP BY od.[OrderID] HAVING SUM(od.Quantity*od.UnitPrice) = (SELECT MAX(temp.Total) FROM (SELECT o.OrderID,SUM(od.Quantity*od.UnitPrice) AS [Total] FROM [dbo].[Orders] AS o INNER JOIN [dbo].[Order Details] AS od ON o.OrderID = od.OrderID GROUP BY o.OrderID) AS temp))) Em còn yếu phần này nên mong thầy cho thêm nhiều ví dụ hơn nữa ạ. Em cảm ơn ạ!
select top 1 C.*,(select sum(UnitPrice*Quantity) from [Order Details] as OD where OD.OrderID =o.OrderID ) as "total" from Orders as O join Customers as C on O.CustomerID= C.CustomerID order by total desc
Tôi xin trả lời nếu có gì sai mong anh có thể sửa cho ạ. Bài giải: select top 1 p.ProductName, (select sum(od.Quantity * od.UnitPrice) from "Order Details" od where od.ProductID = p.ProductID) as "TotalUnitPrice",
(select count(od.OrderID) from "Order Details" od where od.ProductID = p.ProductID) as "TotalOrders" from Products p order by "TotalUnitPrice" desc; Kết quả: 1 dòng sản phẩm có doanh số cao nhất bao gồm tên sản phẩm, tổng số đơn hàng, tổng giá trị ProductName: Côte de Blaye TotalOrders: 24 TotalUnitPrice: 149984,20
Cám ơn anh :) em gửi bài tập: SELECT TOP 1 o.CustomerID, SUM(od.UnitPrice * od.Quantity) AS [Tổng giá trị giao dịch] FROM dbo.Orders AS o LEFT JOIN dbo.[Order Details] AS od ON od.OrderID = o.OrderID LEFT JOIN dbo.Customers AS c ON c.CustomerID = o.CustomerID GROUP BY o.CustomerID ORDER BY [Tổng giá trị giao dịch] DESC;
Ở ví dụ : Lấy thông tin về các sản phẩm có số lượng tồn kho ít hơn số lượng số lượng tồn kho trung bình của tất cả các sản phẩm: Theo em thì số lượng tồn kho = Số lượng trong kho (UnitsInStock) - Số lượng đã đặt (UnitsOnOrder) Vậy câu lệnh Query phải là : SELECT * ,([UnitsInStock]-[UnitsOnOrder]) AS [Tồn kho] FROM [Products] WHERE ([UnitsInStock]-[UnitsOnOrder]) < ( SELECT AVG ([UnitsInStock]-[UnitsOnOrder]) FROM [Products] ) Như vậy có đúng ko ạ, vì nếu chỉ tính AVG của UnitsInStock thì chỉ tính dc giá trị trung bình của hàng trong kho thôi
Hình như trong bảng [dbo].[Order Details] có 1 cột là [Discount]. Khi mấy bạn tính tổng đơn giá thì lấy ([UnitPrice]*[Quantity]) - [Discount] thì mới đúng chứ nhỉ, mình lướt cmt thì thấy đa số mấy bạn không trừ cột này đi khi tính tổng đơn giá
tôi nghĩ là nó cũng tùy kiểu discount, nếu discount trừ số tiền nhất định thì trừ discount là xong, còn discount % tiền thì sẽ là như bạn nói @@VietNguyen-qx4yc
em gửi cách làm khác ạ select top 1 o.CustomerID, sum(temp.price) as [TotalPrice] from Orders o join (select sum(od1.Quantity*od1.UnitPrice) as price, od1.OrderID from [Order Details] od1 group by od1.OrderID) as temp on temp.OrderID = o.OrderID group by o.CustomerID order by sum(temp.price) desc
Để bạn có tinh thần tự học và ghi dấu lại sự vượt qua của chính bản thân bạn. Bạn ko trả lương hoặc đóng học phí cho mình nên đừng quá hy vọng vào sự phục vụ của mình dành cho bạn.
Không biết lồng ghép các câu lệnh như thế nào cho ngắn gọn và chuyên nghiệp, nhưng mình tự mày mò cũng ra được kết quả. Bạn nào bị chậm hiểu như mình thì có thể tiếp cận như mình nhé! Bước 1: Tìm ra OrderID có giá trị đơn hàng lớn nhất SELECT TOP 1 [OrderID] FROM [dbo].[Order Details] od ORDER BY od.UnitPrice*od.Quantity DESC => Lúc này bạn sẽ thấy Order có ID là 10865 có giá trị đơn hàng lớn nhất Bước 2: Kiểm tra xem Order có giá trị lớn nhất là bao nhiêu SELECT MAX(od.UnitPrice*od.Quantity) AS Donhanggiatrilonnhat FROM [dbo].[Order Details] od => Lúc này bạn sẽ thấy Order có giá trị lớn nhất = 15810 Bước 3: Kiểm tra lại xem có đúng OrderID 10865 có giá trị bằng 15810 hay không SELECT* FROM[dbo].[Order Details] WHERE[OrderID]='10865' => Lúc này bạn lấy Unit Price * Quantity thì ra đúng 10865 => OrderID 10865 là order có giá trị lớn nhất Bước 4: Tìm xem chủ nhân (CustomerID) của Order10865 kia là ai SELECT [CustomerID] FROM[dbo].[Orders] WHERE[OrderID]='10865' => Tìm ra được CustomerID của Order kia là 'QUICK' Bước 5: Tìm ra được CustomerID rồi thì view all thông tin của Customer đó thui là xong SELECT* FROM[dbo].[Customers] WHERE [CustomerID]='QUICK' Không ngờ học chuyên Văn xong giờ chuyển qua ngành IT, thấy cái logic của mình kém ghê cơ. Có gì mọi ng góp ý cho mình vs nha!
Ui cuối cùng cũng tìm ra được đáp án rồi. Cách làm của mình rất chậm nhưng vẫn ra được kết quả, mỗi tội là không biết lồng ghép các câu vào với nhau như thế nào. Các bạn tham khảo và góp ý nha! Khổ quá, chuyên Văn logic kém bayh lại chuyển sang IT đúng đau đau cái đầu :)))) Bước 1: Tìm xem giá trị lớn nhất trong số các order là bao nhiêu SELECT MAX(od.UnitPrice*od.Quantity) AS Giatrilonnhat FROM [dbo].[Order Details] od => Lúc này bạn sẽ thấy order có giá trị lớn nhất sẽ bằng 15810. Tuy nhiên bạn vẫn chưa biết giá trị lớn nhất đó thuộc về OrderID nào, nên cùng đến bước 2 nhé. Bước 2: Tìm xem OrderID nào có giá trị lớn nhất (cụ thể là bằng 15810) SELECT TOP 1 [OrderID] FROM [dbo].[Order Details] od ORDER BY od.UnitPrice*od.Quantity DESC => Lúc này tìm ra OrderID 10865 có giá trị lớn nhất Bước 3: Double check xem OrderID 10865 có đúng là có giá trị lớn nhất (15810) hay không SELECT* FROM[dbo].[Order Details] WHERE[OrderID]='10865' => Lúc này, bạn lấy UnitPrice nhân với Quantity và ra đúng là 15810. Bước tiếp theo là tìm xem CustomerID nào là chủ nhân của Order kia Bước 4: SELECT [CustomerID] FROM[dbo].[Orders] WHERE[OrderID]='10865' => Tìm ra CustomerID là 'QUICK' Bước 5: Biết CustomerID rồi thì SELECT ALL để xem thông tin đầy đủ của customer đó SELECT* FROM[dbo].[Customers] WHERE [CustomerID]='QUICK' Lâu la vãi chưởng nhưng mà xong rùi nhé! Sang bài 30 thôi.
Cám ơn thầy. Em gửi bài tập ạ. Mng góp ý giúp mình nếu có sai sót nhe ^_^ SELECT TOP 1 C.* FROM Customers AS C JOIN Orders AS O ON C.CustomerID = O.CustomerID JOIN [Order Details] AS OD ON OD.OrderID = O.OrderID WHERE O.OrderID = ( SELECT TOP 1 OD.OrderID FROM [Order Details] AS OD GROUP BY OD.OrderID ORDER BY SUM(OD.UnitPrice * OD.Quantity) DESC )
select distinct C.* from Customers as C inner join Orders as O on O.CustomerID = C.CustomerID inner join [Order Details] as OD on OD.OrderID = O.OrderID where O.OrderID = (select top 1 OrderID from [Order Details] group by OrderID Order by SUM(UnitPrice * Quantity ) DESC)
BT mình chỉ làm được như vậy không biết đúng không select OrderID,CustomerID,TotalOrder from (select o.OrderID,o.CustomerID,(od.UnitPrice*od.Quantity) as TotalOrder from [dbo].[Order Details] od inner join [dbo].[Orders] o on od.OrderID = o.OrderID) as T where TotalOrder = ( select max(UnitPrice*Quantity) from [Order Details]);
-- Câu cuối lấy thông tin về các khách hàng có tổng giá trị đơn hàng lớn nhất Giải: SELECT * FROM Customers C INNER JOIN Orders O ON C.CustomerID = O.CustomerID INNER JOIN [Order Details] OD ON OD.OrderID = O.OrderID WHERE (Quantity*UnitPrice) IN ( SELECT MAX(Quantity*UnitPrice) FROM [Order Details] ); -- Hợp 3 bảng chứa thông tin lại, đề lấy thông tin khách hàng nên SELECT * để lấy hết -- Tính giá trị từng đơn đặt hàng (Quantity*UnitPrice) rồi so sánh với giá trị max của từng đơn đặt hàng đó ==> Kết quả 2 rows giá trị lớn nhất bằng nhau đúng chứ ạ
Em gửi bài tập. SELECT c.* FROM Orders o JOIN Customers c ON o.CustomerID = c.CustomerID WHERE OrderID IN ( SELECT OrderID FROM [Order Details] GROUP BY OrderID HAVING SUM(UnitPrice * Quantity) = ( SELECT MAX(TotalPrice) FROM ( SELECT OrderID, SUM(UnitPrice * Quantity) as TotalPrice FROM [Order Details] GROUP BY OrderID ) as Temp ) )
Bài tập tự giải: ---Đã đọc bài các bạn ở dưới, nhưng không thấy bạn nào giải theo cách này, CÁC BẠN TOÀN BỎ QUA PHẦN DISCOUNT CỦA ĐƠN HÀNG, VẬY LÀ HỎNG RỒI!! select distinct c.* from Customers as c inner join Orders as o on c.CustomerID = o.CustomerID inner join "Order Details" as od on o.orderID = od.orderID where o.orderID in (select top 1 od.OrderID from "Order Details" as od group by od.OrderID order by sum(round(od.UnitPrice*od.Quantity*(1-od.Discount),0)) desc)
select c.*,( select max([UnitPrice]*[Quantity]) from [dbo].[Order Details] ) as [tổng giá trị đơn hàng] from [dbo].[Customers] c where c.CustomerID in( select o.[CustomerID] from [dbo].[Orders] o inner join [dbo].[Order Details] od on o.OrderID = od.OrderID where od.UnitPrice*od.Quantity = ( select max([UnitPrice]*[Quantity]) from [dbo].[Order Details] ) );
Bai 6: SELECT c.*, temp2.TotalCashPerCustomer FROM Customers AS c INNER JOIN (SELECT TOP 1 temp.CustomerID, SUM(temp.OrderCash) AS TotalCashPerCustomer FROM (SELECT o.OrderID, o.CustomerID, SUM(od.UnitPrice*od.Quantity) AS OrderCash FROM Orders AS o INNER JOIN [Order Details] AS od ON o.OrderID=od.OrderID GROUP BY o.OrderID, o.CustomerID) AS temp GROUP BY temp.CustomerID ORDER BY SUM(temp.OrderCash) DESC) AS temp2 ON c.CustomerID=temp2.CustomerID
Em gửi lại ạ bài trước e sai SELECT C.ContactName, O.OrderID FROM Orders O, Customers C WHERE O.CustomerID = C.CustomerID AND O.OrderID IN ( SELECT OrderID FROM( SELECT OD.OrderID, SUM(OD.UnitPrice * OD.Quantity) AS "Tổng giá trị" FROM [Order Details] OD, Orders O WHERE OD.OrderID = O.OrderID GROUP BY OD.OrderID ) AS TMP WHERE TMP.[Tổng giá trị] =( SELECT TOP 1 SUM(OD.UnitPrice * OD.Quantity) FROM [Order Details] OD, Orders O WHERE OD.OrderID = O.OrderID GROUP BY OD.OrderID ORDER BY SUM(OD.UnitPrice * OD.Quantity) DESC ) )
hình như không cần subquery vẫn tìm ra được select top 1 sum(od.UnitPrice*od.Quantity) as [totalpriceofcustomer], o.CustomerID from Orders o, [Order Details] od where o.OrderID = od.OrderID group by o.CustomerID order by [totalpriceofcustomer] desc;
Nhưng mà làm theo cách này chỉ ra đc 1 khách hàng thôi ấy. Mình làm theo sub-query thì trả về 2 thông tin khách hàng họ có giá trị đơn hàng đều là lớn nhất á
@@nguyennhuquynh1953 Đề bài hỏi là tìm thông tin khách hàng có tổng giá trị đơn hàng lớn nhất chứ không phải là 1 đơn hàng. -Nếu tìm thông tin khách hàng có đơn hàng đơn hàng giá trị lớn nhất thì group by theo orderid. -Còn nếu tìm khách hàng có tổng giá trị đơn hàng lớn nhất thì bạn còn phải sum lại giá trị của tất cả đơn hàng mà họ đã mua sau đó tìm ra giá trị lớn nhất. Nên cái này phải group by theo customerid Lâu rồi mình mới coi lại hên quá vẫn còn nhớ, giờ xem lại thấy hồi xưa mình viết như vậy cùi quá không lấy được tất cả thông tin, dùng sub query được một cái hay là mình có thể dùng select * để lấy được toàn bộ thông tin . Cám ơn bạn đã góp ý kiến cho mình nhe. Chúc bạn học tốt
@@nguyennhuquynh1953 select c.*, temp.total from Customers c join ( select top 1 o.CustomerID ,sum(od.Quantity*od.UnitPrice) as total from [Order Details] od join Orders o on o.OrderID = od.OrderID group by o.CustomerID order by sum(od.Quantity*od.UnitPrice) desc )as temp on c.CustomerID = temp.CustomerID
@@nguyennhuquynh1953 select c.* from Customers c where c.CustomerID in ( select top 1 o.CustomerID from [Order Details] od join Orders o on o.OrderID = od.OrderID group by o.CustomerID order by sum(od.Quantity*od.UnitPrice) desc )
16/08/2024: 9:54 Fri SELECT c.CustomerID, c.ContactName FROM [dbo].[Customers] c INNER JOIN [dbo].[Orders] o ON o.CustomerID = c.CustomerID INNER JOIN [dbo].[Order Details] od ON od.OrderID = o.OrderID WHERE (od.Quantity * od.UnitPrice) = ( SELECT MAX(od.Quantity * od.UnitPrice) FROM [dbo].[Order Details] od ) 2 rows
Mong anh có mấy bài giải hoặc là anh có thể để lại KẾT QUẢ IN RA BAO NHIÊU DÒNG Ạ SELECT o.CustomerID,o.OrderID,o.ShipAddress, od.Quantity, od.UnitPrice, od.ProductID FROM dbo.Customers c LEFT JOIN dbo.Orders o ON o.CustomerID = c.CustomerID LEFT JOIN dbo.[Order Details] od ON o.OrderID = od.OrderID WHERE od.Quantity* od.UnitPrice = ( SELECT MAX (od.Quantity*od.UnitPrice) FROM dbo.[Order Details] od )
BT: SELECT c.* ,(od.UnitPrice*od.Quantity) AS TotalPrice FROM [dbo].[Customers] AS c INNER JOIN [dbo].[Orders] AS o ON c.CustomerID = o.CustomerID INNER JOIN [dbo].[Order Details] od ON o.OrderID = od.OrderID WHERE (od.UnitPrice*od.Quantity) = ( SELECT MAX(od.UnitPrice*od.Quantity) FROM [dbo].[Order Details] AS od )
select c.ContactName from Orders as o inner join Customers as c on o.CustomerID = c.CustomerID inner join [Order Details] as od on o.OrderID =od.OrderID group by c.ContactName having sum(UnitPrice*Quantity) = (select top 1 sum(UnitPrice*Quantity) from [Order Details] as od inner join Orders as o on od.OrderID = o.OrderID group by o.CustomerID order by sum(UnitPrice*Quantity) desc) Result: Horst Kloss
BT: SELECT C.ContactName, OD.UnitPrice*OD.Quantity AS "Tổng giá trị đơn hàng" FROM Orders AS O INNER JOIN Customers AS C ON O.CustomerID = C.CustomerID INNER JOIN [Order Details] AS OD ON OD.OrderID = O.OrderID WHERE OD.UnitPrice*OD.Quantity = ( SELECT MAX(OD.UnitPrice*OD.Quantity) FROM [Order Details] AS OD );
SELECT C.*, OD.[UnitPrice]*OD.[Quantity] AS [TotalOrderValue] FROM [dbo].[Customers] AS C INNER JOIN [dbo].[Orders] AS O ON C.[CustomerID]=O.[CustomerID] INNER JOIN [dbo].[Order Details] AS OD ON O.[OrderID]=OD.[OrderID] WHERE OD.[UnitPrice]*OD.[Quantity] = ( SELECT MAX([UnitPrice]*[Quantity]) FROM [dbo].[Order Details] AS OD )
select od.Quantity*od.UnitPrice as total, c.* from [dbo].[Order Details] as od join [dbo].[Orders] as o on o.OrderID = od.OrderID join [dbo].[Customers] as c on c.CustomerID = o.CustomerID where od.Quantity*od.UnitPrice in ( select max(od.Quantity*od.UnitPrice) from [dbo].[Order Details] as od)
đề là lấy gia đơn hàng có giá trị cao nhất á bạn. thì mình subquery ở where để tìm ra địa chỗ có có đơn hàng có giá trị max thui. bạn cứ cắt câu subquey ở trong ra chạy riêng là sẽ hiểu
@@kjsaljl Mình cứ tưởng là dùng SUM(od.UnitPrice * od.Quantity) chứ, vậy SUM với MAX khi gán vào đây thì có nghĩ gì bạn giải thích giúp mình được không ạ
select distinct c.* from Customers as c join orders as o on o.CustomerID = c.CustomerID join [Order Details] as od on o.OrderID = od.OrderID where od.OrderID=( select top 1 od.OrderID from [Order Details] as od group by od.OrderID order by Sum(od.[Quantity]*od.[UnitPrice]) desc )
Em gui loi giai bai tap --Lay thong tin ve cac khach hang co tong gia tri don hang lon nhat SELECT DISTINCT * FROM Customers c JOIN Orders o ON c.CustomerID = o.CustomerID JOIN [Order Details] od ON od.OrderID = o.OrderID WHERE o.OrderID IN( SELECT TOP 1 od.OrderID FROM [Order Details] od GROUP BY od.OrderID ORDER BY SUM(od.UnitPrice*od.Quantity) DESC );
Select * From Customers as c inner join Orders as o on c.CustomerID = o.CustomerID inner join [Order Details] as od on o.OrderID = od.OrderID Where (od.Quantity * od.UnitPrice) = ( Select Max(od.UnitPrice * od.Quantity) as[Invoice] From [Order Details] as od
SELECT c.* FROM [dbo].[Orders] o JOIN [dbo].[Customers] c ON c.CustomerID= o.CustomerID WHERE o.OrderID IN ( SELECT [OrderID] FROM [dbo].[Order Details] WHERE [UnitPrice]*[Quantity]= ( select MAX([UnitPrice]*[Quantity]) AS "Giá đơn" from [dbo].[Order Details] ) ) ;
SELECT c.* FROM [Customers] as c INNER JOIN [Orders] as o ON c.CustomerID = O.CustomerID INNER JOIN [Order Details] as od ON od.OrderID = o.OrderID WHERE od.Quantity * od.UnitPrice = ( SELECT MAX(od.[UnitPrice] * od.[Quantity] ) AS GIATRIDONHANG FROM [Order Details] as od ) so fk hard maybe i'm not smart enough
Em gửi đáp án ạ SELECT o.OrderID, c.ContactName, SUM (od.UnitPrice * od.Quantity) Total FROM Customers c INNER JOIN Orders o ON o.CustomerID = c.CustomerID INNER JOIN [Order Details] od ON od.OrderID = o.OrderID GROUP BY o.OrderID, c.ContactName HAVING SUM (od.UnitPrice * od.Quantity) = ( SELECT MAX([Total MAX]) FROM (SELECT SUM(od.UnitPrice*od.Quantity) AS [Total MAX] FROM [Order Details] od GROUP BY od.OrderID ) AS Groups);
Em gửi anh câu trả lời SELECT TOP 1 C.CustomerID,C.ContactName, P.ProductName, SUM (P.UnitPrice*OD.Quantity) AS "Total" FROM DBO.[Order Details] OD INNER JOIN DBO.Products P ON P.ProductID = OD.ProductID INNER JOIN DBO.Orders O ON O.OrderID = OD.OrderID INNER JOIN DBO.Customers C ON C.CustomerID = O.CustomerID GROUP BY C.CustomerID,C.ContactName, P.ProductName ORDER BY Total DESC
select x.*,t.price from [dbo].[Customers] as x inner join ( select top 1 c.CustomerID,sum(od.[UnitPrice]*od.[Quantity]) as price from [dbo].[Customers] as c inner join [dbo].[Orders] as o on o.CustomerID=c.CustomerID inner join [dbo].[Order Details] as od on o.OrderID=od.OrderID group by c.CustomerID order by price desc) as t on t.CustomerID=x.CustomerID
em gửi đáp án ạ: SELECT c.CustomerID, c.ContactName, SUM(od.Quantity * od.UnitPrice * (1-od.Discount)) as Total FROM Orders o JOIN [Order Details] od ON o.OrderID = od.OrderID JOIN Customers c ON c.CustomerID = o.CustomerID GROUP BY c.CustomerID, c.ContactName HAVING SUM(od.Quantity * od.UnitPrice * (1-od.Discount)) >= ALL (SELECT SUM(od.Quantity * od.UnitPrice * (1-od.Discount)) as Total FROM Orders o JOIN [Order Details] od ON o.OrderID = od.OrderID JOIN Customers c ON c.CustomerID = o.CustomerID GROUP BY c.CustomerID, c.ContactName)
SELECT c.* FROM dbo.Customers AS c WHERE c.CustomerID IN ( SELECT CustomerID FROM dbo.Orders WHERE OrderID IN ( SELECT OrderID FROM dbo.[Order Details] WHERE (UnitPrice*Quantity) = (SELECT MAX(UnitPrice*Quantity) FROM dbo.[Order Details]) ) );
🗣🗣 SELECT * FROM Customers c WHERE c.CustomerID IN ( SELECT o.CustomerID FROM Orders o INNER JOIN [Order Details] od ON o.OrderID = od.OrderID GROUP BY o.OrderID, o.CustomerID HAVING SUM(od.UnitPrice * od.Quantity) = (SELECT TOP 1 SUM(od.UnitPrice * od.Quantity) FROM [Order Details] od GROUP BY od.OrderID ORDER BY SUM(od.UnitPrice * od.Quantity) DESC) )
SELECT TOP 1 c.* FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID WHERE o.OrderID = ( SELECT TOP 1 OrderID FROM [Order Details] GROUP BY OrderID ORDER BY SUM(Quantity * UnitPrice) DESC );
SELECT TOP 10 od.OrderID,C.* FROM [dbo].[Order Details] OD INNER JOIN [dbo].[Orders] O ON OD.OrderID = O.OrderID INNER JOIN [dbo].[Customers] C ON C.CustomerID =O.CustomerID WHERE OD.Quantity*OD.UnitPrice-OD.Discount IN (SELECT TOP 10 ( Quantity*UnitPrice-Discount) AS TOTAL FROM [dbo].[Order Details] ORDER BY TOTAL DESC ) ORDER BY OD.Quantity*OD.UnitPrice-OD.Discount DESC;
SELECT C.CustomerID,C.CompanyName,C.ContactName,O.OrderID FROM [dbo].[Customers] AS C INNER JOIN [dbo].[Orders] AS O ON O.CustomerID = C.CustomerID WHERE [OrderID] IN ( SELECT TOP 1 OrderID FROM [dbo].[Order Details] GROUP BY OrderID ORDER BY SUM([UnitPrice]*[Quantity]) DESC);
Cảm ơn anh vì bài giảng rất hay ạ!
Đáp án bài tập:
SELECT o.OrderID, c.CompanyName, c.CustomerID
FROM [dbo].[Customers] c
INNER JOIN [dbo].[Orders] o
ON c.CustomerID = o.CustomerID
INNER JOIN [dbo].[Order Details] od
ON od.OrderID = o.OrderID
GROUP BY o.OrderID, c.CompanyName, c.CustomerID
HAVING SUM(od.Quantity*od.UnitPrice) = (SELECT TOP 1 SUM(od.Quantity*od.UnitPrice) AS Total
FROM [dbo].[Order Details] od
GROUP BY od.OrderID
ORDER BY Total DESC
)
31/03/2024
Em xin cảm ơn thầy ạ.
Sau đây là phần bài tập:
--Lấy thông tin về các khách hàng có tổng giá trị đơn hàng lớn nhất
select * from Customers;
select * from [Order Details];
select * from Orders;
select c.ContactName, o.OrderID,
(Select Sum(od.Quantity* od.UnitPrice)
From "Order Details" od
Where o.OrderID = od.OrderID) as "Total"
from
Orders as o
inner join
Customers c on o.CustomerID = c.CustomerID
Group by
c.ContactName, o.OrderID
Order by
"Total" desc;
Xin cảm ơn thầy và mọi người đã đọc ạ!
Mình học và có làm file theo từng bài của thầy luôn.
Có ghi chép lại và làm lại những phần ghi chép đó thành 1 pp cho lúc cần dễ tra cứu, xem lại.
Lúc luyện tập có thể mở lại xem cú pháp hay là cách sử dụng câu lệnh.
Ai có duyên đọc được nếu cần thì cmt mình gửi cho nha.
Chào bạn, thật tình cờ khi đọc được cmt này. Nếu không phiền, bạn có thể chia sẻ cho mình những ghi chép của bạn được không? Mình xin cảm ơn bạn rất nhiều. Chúc bạn nhiều thành công trong công việc!
Em cũng xin cảm ơn thầy vì những bài học bổ ích!
Mình xin góp ý 1 chút nhé. Bạn chưa đáp ứng được hết yêu cầu của đề bài ạ:
1. Bạn chưa đưa ra được khách hàng có tổng giá trị đơn hàng lớn nhất. Bạn mới chỉ sắp xếp theo thứ tự từ cao xuống thấp thôi.
2. Theo phần code của bạn, bạn mới chỉ tìm được giá trị của đơn hàng theo từng "OrderID". Nhưng theo mình hiểu, đề bài cần lọc ra giá trị đơn hàng theo từng "khách hàng". Mà 1 "khách hàng" có thể có nhiều "Order ID".
Đó là ý kiến của mình, có gì bạn cứ tranh luận nhé, để cùng nhau học tốt hơn. Cảm ơn vì đã đọc!
mình được ko bạn ?
Em gửi bài làm bài cuối, cảm ơn thầy
SELECT c.*
FROM Orders as o
INNER JOIN Customers as c
ON o.CustomerID=c.CustomerID
WHERE o.OrderID IN
(SELECT OrderID
FROM
(SELECT OrderID, SUM(UnitPrice*Quantity) AS Order_TotalPrice
FROM [Order Details]
GROUP BY OrderID) as temp
WHERE temp.Order_TotalPrice=
(SELECT Max(temp.Order_TotalPrice)
FROM
(SELECT OrderID, SUM(UnitPrice*Quantity) AS Order_TotalPrice
FROM [Order Details]
GROUP BY OrderID)
as temp));
good>
Bài bạn này làm đúng nè, nhưng viết SQL nên tường minh thêm tí chẳng hạn chỗ Sub Query thứ 2 bạn nên ghi rõ là SELECT Temp.OrderID
^^
@@CoffeeTran18 bài bạn làm chưa đúng đề bài, đề bài là tìm KH có tổng giá trị đơn hàng lớn nhất chứ ko phải tìm KH sở hữu 1 đơn hàng có value cao nhất.
@@TrinhHuỳnhThịTú-b7v bài này k nói rõ là tổng của 1 đơn hàng hay các đơn hàng vì 1 khách hàng có thể có nhiều đơn hàng nma đọc tổng giá trị đơn hàng thì có thể hiểu được là tổng của 1 đơn hàng tại một thời điểm mà khách hành đặt
em cám ơn thầy vì đã bỏ công sức làm những bài giảng ạ
em xin gửi bài tập
--bt1: lấy thông tin về các khách hàng có tổng giá trị đơn hàng lớn nhất
select (od.Quantity*od.UnitPrice) as TotalPrice
from [Order Details] od
order by TotalPrice desc
; --> kiểm tra giá trị lớn nhất
select c.*, (od.Quantity*od.UnitPrice) as TotalPrice
from [Customers] c
join [Orders] o
on c.CustomerID = o.CustomerID
join [Order Details] od
on od.OrderID = o.OrderID
where (od.Quantity*od.UnitPrice) =
(select max(od.Quantity*od.UnitPrice)
from [Order Details] od)
;
16/04/2024
Cảm ơn anh, em xin phép đóng góp phần lời giải ở bài tập:
-- Lấy thông tin về các khách hàng có tổng giá trị đơn hàng lớn nhất
SELECT c.*
FROM [dbo].[Customers] c
FULL JOIN [dbo].[Orders] o
ON c.CustomerID = o.CustomerID
Full JOIN [dbo].[Order Details] od
ON o.OrderID = od.OrderID
WHERE ([UnitPrice]*[Quantity]) IN (
SELECT MAX([UnitPrice]*[Quantity]) AS [TotalOrdersDetails]
FROM [dbo].[Order Details])
BÀI TẬP:
select c.*
from Customers c
inner join Orders o
on c.CustomerID = o.CustomerID
inner join [Order Details] od
on od.OrderID = o.OrderID
where (od.Quantity * od.UnitPrice) = (
select max (od.Quantity * od.UnitPrice)
from [Order Details] od
);
Em xin cảm ơn thầy về những bài ôn tập như vầy. Mong thầy sẽ ra những bài học chất lượng ạ.
Em xin gửi đáp án cho câu hỏi cuối video:
SELECT DISTINCT c.*
FROM dbo.Customers AS c
JOIN dbo.Orders AS o
ON c.CustomerID = o.CustomerID
WHERE c.CustomerID =
(SELECT o.CustomerID
FROM dbo.Orders AS o
WHERE o.OrderID IN
(SELECT TOP 1 od.OrderID
FROM dbo.[Order Details] AS od
GROUP BY od.OrderID
ORDER BY SUM(Quantity*UnitPrice) DESC)
) ;
trường hợp có 2 đơn hàng có giá max bằng nhau thì sao bạn, dùng TOP 1 vẫn chưa đúng đâu
--Bài 29. Bài tập Sub Query - truy vấn con, truy vấn lồng
--Lấy thông tin về khách hàng có tổng giá trị 1 đơn hàng lớn nhất
select *
from [dbo].[Customers]as c
join [dbo].[Orders] as o on c.CustomerID=o.CustomerID
where o.OrderID=(select top 1 od.OrderID
from[dbo].[Order Details] as od
group by od.OrderID
order by sum([UnitPrice]*[Quantity]) desc )
--Lấy thông tin của khách hàng có tổng giá trị các đơn hàng là lớn nhất
select *
from [dbo].[Customers] as c
where [CustomerID]=(
select top 1 o.CustomerID
from [dbo].[Orders] as o ,[dbo].[Order Details] as od
group by o.CustomerID
order by sum(od.Quantity*od.UnitPrice) desc )
Em cảm ơn ạ, Câu trả lời:
select top 1 c.[CustomerID],c.[CompanyName]
from [dbo].[Orders] as o
inner join [dbo].[Customers] as c
on o.[CustomerID]=c.[CustomerID]
inner join [dbo].[Order Details] as od
on od.[OrderID]=o.[OrderID]
where [UnitPrice]*[Quantity]=(
select max([UnitPrice]*[Quantity])
from [dbo].[Order Details]
);
Em cảm ơn anh rất nhiều ạ,
Đáp án bài tập:
SELECT C.*,OD.UnitPrice*OD.Quantity AS [SUMOrderID max]
FROM [dbo].[Order Details] OD
JOIN [dbo].[Orders] O
ON O.OrderID = OD.OrderID
JOIN [dbo].[Customers] C
ON O.CustomerID = C.CustomerID
WHERE OD.Quantity*OD.UnitPrice = (
SELECT MAX( OD.Quantity*OD.UnitPrice) AS [SUMOrderID max]
FROM[dbo].[Order Details] OD
);
-- RUN RA ĐƯỢC 2 KHÁCH HÀNG CÓ TỔNG GIÁ TRỊ ĐƠN HÀNG LỚN NHẤT LÀ 15810
anh có làm video nào giới thiệu về Execution plan ko ạ
Cám ơn thầy. Em gửi bài tập ạ
SELECT *
FROM [dbo].[Customers] c
WHERE c.CustomerID = (
SELECT TOP 1 c.CustomerID
FROM [dbo].[Customers] c, [dbo].[Order Details] od, [dbo].[Orders] o
WHERE o.CustomerID = c.CustomerID
GROUP BY c.CustomerID, od.Quantity, od.UnitPrice
ORDER BY (od.Quantity * od.UnitPrice) DESC
);
bài giải cho bài tập trên
select top 1 c.CustomerID, c.CompanyName, [tổng giá trị đơn hàng]
from [dbo].[Customers] c
inner join (
select o.[OrderID], o.CustomerID, sum(od.[UnitPrice]*od.[Quantity]) as [tổng giá trị đơn hàng]
from [dbo].[Orders] o
inner join [dbo].[Order Details] od on o.OrderID = od.OrderID
group by o.[OrderID], o.CustomerID
) as OrderTotals on c.CustomerID = OrderTotals.CustomerID
order by [tổng giá trị đơn hàng] desc
--Bai lam cua em (tim duoc 2 record )
select c.* from Orders o
join Customers c
on o.CustomerID = c.CustomerID
where o.OrderID in (
select OrderID from [Order Details]
where (UnitPrice * Quantity) = (select max(UnitPrice*Quantity) from [Order Details]))
em gửi
select c.CustomerID, c.ContactName, o.OrderID
from Customers as c
inner join orders as o
on c.CustomerID=o.CustomerID
where o.OrderID=(
select top 1 orderID
from [Order Details]
group by orderID
order by sum(UnitPrice*Quantity) desc
)
tầm này mỗi người nghĩ 1 kiểu để giải bài này, đọc kết quả mà chỉ biết paste vô, giống thì ok sai thì kệ vì lú não
cảm ơn vì đóng góp của thầy ạ!
câu trả lời:
select TOP 1 CustomerID, SUM ( [UnitPrice]*[Quantity]) Order_Value
FROM (SELECT CustomerID,[UnitPrice],[Quantity]
FROM [dbo].[Order Details] od
join (
SELECT [OrderID],
(
SELECT CustomerID
FROM Customers c
WHERE o.CustomerID=c.CustomerID
) CustomerID
FROM [Orders] o
) db
on od.OrderID=db.[OrderID] ) abc
Group BY CustomerID
Order BY Order_Value DESC
Bài tập (Công nhận bài lần này khó thật sự nhưng khó là ở cách viết code cơ)
SELECT c.*
FROM Orders AS o
INNER JOIN Customers AS c
ON o.CustomerID = c.CustomerID
WHERE o.OrderID IN (
SELECT [Total Price Table].OrderID
FROM (
SELECT od.OrderID, SUM(UnitPrice * Quantity * 1 - Discount) AS [Total Price]
FROM [Order Details] AS od
GROUP BY od.OrderID
) AS [Total Price Table]
WHERE [Total Price Table].[Total Price] = (
SELECT MAX([Total Price Table].[Total Price]) AS [Max Price]
FROM (
SELECT od.OrderID, SUM(UnitPrice * Quantity * 1 - Discount) AS [Total Price]
FROM [Order Details] AS od
GROUP BY od.OrderID
) AS [Total Price Table]
)
)
Đáp án "Lấy thông tin về các khách hàng có tổng giá trị đơn hàng lớn nhất"
select c.*
from Orders as o
inner join Customers as c
on c.CustomerID = o.CustomerID
inner join [Order Details] as od
on od.OrderID = o.OrderID
where (od.Quantity*od.UnitPrice) in (
select MAX(Quantity*UnitPrice) as [Total Order]
from [Order Details]
)
2 rows nhé mọi người
Double Check xem gía trị đơn hàng lớn nhất :
select top 3 pp.OrderID,(Quantity*UnitPrice) as [Total Order], c.CompanyName, c.ContactName
from [Order Details] as pp, Orders as o, Customers as c
where pp.OrderID = o.OrderID AND c.CustomerID = o.CustomerID
order by (Quantity*UnitPrice) desc
Tuyệt vời quá ạ, có người cùng đáp án với mình. Rất ngắn gọn xúc tích ạ
Cảm ơn đóng góp của anh. Em xin gửi đáp án ạ
select *
from Customers c
join Orders o on o.CustomerID = c.CustomerID
where o.OrderID in(
select top 1 OrderID
from [Order Details]
group by OrderID
order by sum(UnitPrice * Quantity) desc
);
cảm ơn thầy nhiều ạ
Em xin trả lời đáp án bài tập cuối VD là :
SELECT c.CustomerID, c.CompanyName, UnitPrice*Quantity AS [Money]
FROM [dbo].[Customers] c
FULL JOIN [dbo].[Orders] o
ON c.CustomerID = o.CustomerID
FULL JOIN [dbo].[Order Details] od
ON o.OrderID = od.OrderID
WHERE UnitPrice*Quantity IN (
SELECT MAX(UnitPrice*Quantity)
FROM [dbo].[Order Details]
)
Cho em hỏi là làm cách nào để biết là lúc mình thêm truy vấn trước from và khi nào thì sau from ạ.
Em cảm ơn ạ.
Giải bài tập:
SELECT c.*, ([UnitPrice]*[Quantity]) as [SUM]
FROM [dbo].[Customers] as c
INNER JOIN [dbo].[Orders] as o
ON o.CustomerID= c.CustomerID
INner join [dbo].[Order Details] as od
ON od.OrderID = o.OrderID
where ([UnitPrice]*[Quantity]) = (
SELECT MAX([UnitPrice]*[Quantity])
FROM [dbo].[Order Details]
)
bài làm
select *
from [dbo].[Customers] c
where c.CustomerID in
(select top 1 c.CustomerID
from [dbo].[Order Details] od
join [dbo].[Orders] o
on od.OrderID =o.OrderID
join [dbo].[Customers] c
on o.CustomerID =c.CustomerID
group by c.CustomerID
order by sum(od.[UnitPrice]*od.[Quantity]) desc)
Thưa thầy, với câu hỏi : lấy thông tin về các đh và tên các sp thuộc các đơn hàng chưa dc giao, thì em thấy làm như thế này cũng ra kết quả 73 row
SELECT p.ProductName, *
FROM Orders o
INNER JOIN [Order Details] d
ON d.OrderID=o.OrderID
INNER JOIN Products p
ON p.ProductID=d.ProductID
WHERE o.ShippedDate is null
Tại vì, khi dùng INNER JOIN, thì các bảng tự động liên kết các thông tin lai với nhau, nên khi dặt điều kiện WHERE thì cứ hỏi thẳng luôn, nên khi thấy Sub Query ở WHERE, em cảm thấy hơi rối, em xin cảm ơn!
Biết ơn anh vì những bài học
SELECT o.OrderID, o.CustomerID, c.ContactName, SUM(od.Quantity * od.UnitPrice) AS 'Total'
FROM dbo.Orders o
INNER JOIN dbo.Customers c
ON o.CustomerID = c.CustomerID
INNER JOIN dbo.[Order Details] od
ON o.OrderID = od.OrderID
GROUP BY o.OrderID, o.CustomerID, c.ContactName
HAVING SUM(od.Quantity * od.UnitPrice) = (
SELECT MAX(total_amount) AS max_order_value
FROM (
SELECT SUM(od.Quantity * od.UnitPrice) as total_amount
FROM [Order Details] od
GROUP BY od.OrderID
) AS order_values);
mình execute cái này thử nma hình như bạn bỏ sót là 1 customerID sẽ có nhiều orderID. của bản mới chỉ so sánh trên 1 orderID thì hải
em xin giải bài tập:
SELECT *, od.Quantity*od.UnitPrice AS TotalPrice
FROM Customers c
INNER JOIN Orders o
ON c.CustomerID = o.CustomerID
INNER JOIN [Order Details] od
ON o.OrderID = od.OrderID
WHERE od.Quantity*od.UnitPrice =
(
SELECT MAX(od.Quantity*od.UnitPrice)
FROM [Order Details] od
);
dạ anh ơi anh có thể làm 1 video những thứ cần học để trở thành back-end và front-end được không ạ 🥰
PHẦN NÀY PHẢI DÙNG CREATE VIEW NHÉ . VÌ NẾU LẤY TOP 1 sẽ có trường hợp hai người bỏ ra Tổng số tiền tương tự nhau mua hàng . Thì chỉ lấy được duy nhất một người . Kết quả sẽ bị sai vì thiếu mất một người
Dạ BT4 đề bảo ít hơn là mình lấy nhỏ hơn đúng ko ạ.
Anh cập nhật kết quả của bài toán với ạ . Em làm xong cũng ko biết đúng hay sai ^^
Dạ em xin phép gửi bài giải:
SELECT o.OrderID, c.ContactName, SUM (od.UnitPrice*od.Quantity) [Total]
FROM Customers [c]
INNER JOIN Orders [o]
ON o.CustomerID = c.CustomerID
INNER JOIN [Order Details] [od]
ON od.OrderID = o.OrderID
GROUP BY o.OrderID, c.ContactName
HAVING SUM (od.UnitPrice*od.Quantity) = (
SELECT MAX([Total MAX])
FROM (SELECT SUM(od.UnitPrice*od.Quantity) AS [Total MAX]
FROM [Order Details] od
GROUP BY od.OrderID
) AS [Valune])
-- Lay thong tin va cac khach hang co tong gia tri don hang lon nhat
SELECT c.*
FROM [dbo].[Customers] AS c
WHERE c.CustomerID =
(SELECT o.CustomerID
FROM [dbo].[Orders] AS o
WHERE o.OrderID =
(SELECT od.[OrderID]
FROM [dbo].[Order Details] AS od
GROUP BY od.[OrderID]
HAVING SUM(od.Quantity*od.UnitPrice) =
(SELECT MAX(temp.Total)
FROM
(SELECT o.OrderID,SUM(od.Quantity*od.UnitPrice) AS [Total]
FROM [dbo].[Orders] AS o
INNER JOIN [dbo].[Order Details] AS od
ON o.OrderID = od.OrderID
GROUP BY o.OrderID) AS temp)))
Em còn yếu phần này nên mong thầy cho thêm nhiều ví dụ hơn nữa ạ. Em cảm ơn ạ!
select top 1 C.*,(select sum(UnitPrice*Quantity)
from [Order Details] as OD
where OD.OrderID =o.OrderID ) as "total"
from Orders as O
join Customers as C
on O.CustomerID= C.CustomerID
order by total desc
Để luyện tập,minh co một bài toán tương tự như sau:
-- LẤY THÔNG TIN CÁC SẢN PHẨM CÓ DOANH SỐ BÁN HÀNG CAO NHẤT
Tôi xin trả lời nếu có gì sai mong anh có thể sửa cho ạ.
Bài giải:
select top 1 p.ProductName,
(select sum(od.Quantity * od.UnitPrice)
from "Order Details" od
where od.ProductID = p.ProductID) as "TotalUnitPrice",
(select count(od.OrderID)
from "Order Details" od
where od.ProductID = p.ProductID) as "TotalOrders"
from
Products p
order by "TotalUnitPrice" desc;
Kết quả: 1 dòng sản phẩm có doanh số cao nhất bao gồm tên sản phẩm, tổng số đơn hàng, tổng giá trị
ProductName: Côte de Blaye
TotalOrders: 24
TotalUnitPrice: 149984,20
Cám ơn anh :) em gửi bài tập:
SELECT TOP 1 o.CustomerID, SUM(od.UnitPrice * od.Quantity) AS [Tổng giá trị giao dịch]
FROM dbo.Orders AS o
LEFT JOIN dbo.[Order Details] AS od
ON od.OrderID = o.OrderID
LEFT JOIN dbo.Customers AS c
ON c.CustomerID = o.CustomerID
GROUP BY o.CustomerID
ORDER BY [Tổng giá trị giao dịch] DESC;
Ông có suy nghĩ với cách làm y tôi luôn bất ngờ thật
@@atthanh8163 welcome ông ;)
Ở ví dụ : Lấy thông tin về các sản phẩm có số lượng tồn kho ít hơn số lượng số lượng tồn kho trung bình của tất cả các sản phẩm:
Theo em thì số lượng tồn kho = Số lượng trong kho (UnitsInStock) - Số lượng đã đặt (UnitsOnOrder)
Vậy câu lệnh Query phải là :
SELECT * ,([UnitsInStock]-[UnitsOnOrder]) AS [Tồn kho]
FROM [Products]
WHERE ([UnitsInStock]-[UnitsOnOrder]) < (
SELECT AVG ([UnitsInStock]-[UnitsOnOrder])
FROM [Products]
)
Như vậy có đúng ko ạ, vì nếu chỉ tính AVG của UnitsInStock thì chỉ tính dc giá trị trung bình của hàng trong kho thôi
Hình như trong bảng [dbo].[Order Details] có 1 cột là [Discount]. Khi mấy bạn tính tổng đơn giá thì lấy ([UnitPrice]*[Quantity]) - [Discount] thì mới đúng chứ nhỉ, mình lướt cmt thì thấy đa số mấy bạn không trừ cột này đi khi tính tổng đơn giá
mk nghĩ phải là - [Discount]*[UnitPrice]*[Quantity] mới đúng !
tôi nghĩ là nó cũng tùy kiểu discount, nếu discount trừ số tiền nhất định thì trừ discount là xong, còn discount % tiền thì sẽ là như bạn nói @@VietNguyen-qx4yc
Bài tập những dạng này thuộc dạng bài nâng cao chưa thầy ?
huhu thấy rep em 1 chữ cũng đc :((((
em gửi cách làm khác ạ
select top 1 o.CustomerID, sum(temp.price) as [TotalPrice]
from Orders o
join (select sum(od1.Quantity*od1.UnitPrice) as price, od1.OrderID
from [Order Details] od1
group by od1.OrderID) as temp
on temp.OrderID = o.OrderID
group by o.CustomerID
order by sum(temp.price) desc
cho bài tập bảo cmt mà ko rep chữa thì bảo cmt làm gì vậy ạ ?
Để bạn có tinh thần tự học và ghi dấu lại sự vượt qua của chính bản thân bạn. Bạn ko trả lương hoặc đóng học phí cho mình nên đừng quá hy vọng vào sự phục vụ của mình dành cho bạn.
huhu anh ơi anh chữa bài này đi ạ :(((
Không biết lồng ghép các câu lệnh như thế nào cho ngắn gọn và chuyên nghiệp, nhưng mình tự mày mò cũng ra được kết quả. Bạn nào bị chậm hiểu như mình thì có thể tiếp cận như mình nhé!
Bước 1: Tìm ra OrderID có giá trị đơn hàng lớn nhất
SELECT TOP 1 [OrderID]
FROM [dbo].[Order Details] od
ORDER BY od.UnitPrice*od.Quantity DESC
=> Lúc này bạn sẽ thấy Order có ID là 10865 có giá trị đơn hàng lớn nhất
Bước 2: Kiểm tra xem Order có giá trị lớn nhất là bao nhiêu
SELECT MAX(od.UnitPrice*od.Quantity) AS Donhanggiatrilonnhat
FROM [dbo].[Order Details] od
=> Lúc này bạn sẽ thấy Order có giá trị lớn nhất = 15810
Bước 3: Kiểm tra lại xem có đúng OrderID 10865 có giá trị bằng 15810 hay không
SELECT*
FROM[dbo].[Order Details]
WHERE[OrderID]='10865'
=> Lúc này bạn lấy Unit Price * Quantity thì ra đúng 10865
=> OrderID 10865 là order có giá trị lớn nhất
Bước 4: Tìm xem chủ nhân (CustomerID) của Order10865 kia là ai
SELECT [CustomerID]
FROM[dbo].[Orders]
WHERE[OrderID]='10865'
=> Tìm ra được CustomerID của Order kia là 'QUICK'
Bước 5: Tìm ra được CustomerID rồi thì view all thông tin của Customer đó thui là xong
SELECT*
FROM[dbo].[Customers]
WHERE [CustomerID]='QUICK'
Không ngờ học chuyên Văn xong giờ chuyển qua ngành IT, thấy cái logic của mình kém ghê cơ. Có gì mọi ng góp ý cho mình vs nha!
Ui cuối cùng cũng tìm ra được đáp án rồi. Cách làm của mình rất chậm nhưng vẫn ra được kết quả, mỗi tội là không biết lồng ghép các câu vào với nhau như thế nào. Các bạn tham khảo và góp ý nha! Khổ quá, chuyên Văn logic kém bayh lại chuyển sang IT đúng đau đau cái đầu :))))
Bước 1: Tìm xem giá trị lớn nhất trong số các order là bao nhiêu
SELECT MAX(od.UnitPrice*od.Quantity) AS Giatrilonnhat
FROM [dbo].[Order Details] od
=> Lúc này bạn sẽ thấy order có giá trị lớn nhất sẽ bằng 15810.
Tuy nhiên bạn vẫn chưa biết giá trị lớn nhất đó thuộc về OrderID nào, nên cùng đến bước 2 nhé.
Bước 2: Tìm xem OrderID nào có giá trị lớn nhất (cụ thể là bằng 15810)
SELECT TOP 1 [OrderID]
FROM [dbo].[Order Details] od
ORDER BY od.UnitPrice*od.Quantity DESC
=> Lúc này tìm ra OrderID 10865 có giá trị lớn nhất
Bước 3: Double check xem OrderID 10865 có đúng là có giá trị lớn nhất (15810) hay không
SELECT*
FROM[dbo].[Order Details]
WHERE[OrderID]='10865'
=> Lúc này, bạn lấy UnitPrice nhân với Quantity và ra đúng là 15810.
Bước tiếp theo là tìm xem CustomerID nào là chủ nhân của Order kia
Bước 4:
SELECT [CustomerID]
FROM[dbo].[Orders]
WHERE[OrderID]='10865'
=> Tìm ra CustomerID là 'QUICK'
Bước 5: Biết CustomerID rồi thì SELECT ALL để xem thông tin đầy đủ của customer đó
SELECT*
FROM[dbo].[Customers]
WHERE [CustomerID]='QUICK'
Lâu la vãi chưởng nhưng mà xong rùi nhé! Sang bài 30 thôi.
Cám ơn thầy. Em gửi bài tập ạ. Mng góp ý giúp mình nếu có sai sót nhe ^_^
SELECT TOP 1 C.*
FROM Customers AS C
JOIN Orders AS O
ON C.CustomerID = O.CustomerID
JOIN [Order Details] AS OD
ON OD.OrderID = O.OrderID
WHERE O.OrderID = (
SELECT TOP 1
OD.OrderID
FROM [Order Details] AS OD
GROUP BY OD.OrderID
ORDER BY SUM(OD.UnitPrice * OD.Quantity) DESC
)
bài này nhóm theo đơn hàng để tìm ra tổng hóa đơn và sau đó phải nhóm theo khách hàng nữa vì khách hàng họ ko phải mua 1 hóa đơn đâu
select distinct C.*
from Customers as C
inner join
Orders as O on O.CustomerID = C.CustomerID
inner join
[Order Details] as OD on OD.OrderID = O.OrderID
where O.OrderID =
(select top 1 OrderID
from [Order Details]
group by OrderID
Order by SUM(UnitPrice * Quantity ) DESC)
BT mình chỉ làm được như vậy không biết đúng không
select OrderID,CustomerID,TotalOrder from
(select o.OrderID,o.CustomerID,(od.UnitPrice*od.Quantity) as TotalOrder
from [dbo].[Order Details] od
inner join [dbo].[Orders] o
on od.OrderID = o.OrderID) as T
where TotalOrder =
( select max(UnitPrice*Quantity) from [Order Details]);
-- Câu cuối lấy thông tin về các khách hàng có tổng giá trị đơn hàng lớn nhất
Giải:
SELECT *
FROM Customers C
INNER JOIN Orders O
ON C.CustomerID = O.CustomerID
INNER JOIN [Order Details] OD
ON OD.OrderID = O.OrderID
WHERE (Quantity*UnitPrice) IN (
SELECT MAX(Quantity*UnitPrice)
FROM [Order Details]
);
-- Hợp 3 bảng chứa thông tin lại, đề lấy thông tin khách hàng nên SELECT * để lấy hết
-- Tính giá trị từng đơn đặt hàng (Quantity*UnitPrice) rồi so sánh với giá trị max của từng đơn đặt hàng đó
==> Kết quả 2 rows giá trị lớn nhất bằng nhau đúng chứ ạ
Em gửi bài tập.
SELECT c.*
FROM Orders o
JOIN Customers c ON o.CustomerID = c.CustomerID
WHERE OrderID IN (
SELECT OrderID
FROM [Order Details]
GROUP BY OrderID
HAVING SUM(UnitPrice * Quantity) = (
SELECT MAX(TotalPrice)
FROM (
SELECT OrderID, SUM(UnitPrice * Quantity) as TotalPrice
FROM [Order Details]
GROUP BY OrderID
) as Temp )
)
Bài tập tự giải:
---Đã đọc bài các bạn ở dưới, nhưng không thấy bạn nào giải theo cách này, CÁC BẠN TOÀN BỎ QUA PHẦN DISCOUNT CỦA ĐƠN HÀNG, VẬY LÀ HỎNG RỒI!!
select distinct c.*
from Customers as c
inner join Orders as o
on c.CustomerID = o.CustomerID
inner join "Order Details" as od
on o.orderID = od.orderID
where o.orderID in (select top 1 od.OrderID from "Order Details" as od group by od.OrderID order by sum(round(od.UnitPrice*od.Quantity*(1-od.Discount),0)) desc)
select c.*,(
select max([UnitPrice]*[Quantity])
from [dbo].[Order Details]
) as [tổng giá trị đơn hàng]
from [dbo].[Customers] c
where c.CustomerID in(
select o.[CustomerID]
from [dbo].[Orders] o
inner join [dbo].[Order Details] od
on o.OrderID = od.OrderID
where od.UnitPrice*od.Quantity = (
select max([UnitPrice]*[Quantity])
from [dbo].[Order Details] )
);
Bai 6:
SELECT c.*, temp2.TotalCashPerCustomer
FROM Customers AS c
INNER JOIN
(SELECT TOP 1 temp.CustomerID, SUM(temp.OrderCash) AS TotalCashPerCustomer
FROM
(SELECT o.OrderID, o.CustomerID, SUM(od.UnitPrice*od.Quantity) AS OrderCash
FROM Orders AS o
INNER JOIN [Order Details] AS od
ON o.OrderID=od.OrderID
GROUP BY o.OrderID, o.CustomerID) AS temp
GROUP BY temp.CustomerID
ORDER BY SUM(temp.OrderCash) DESC) AS temp2
ON c.CustomerID=temp2.CustomerID
Em gửi lại ạ bài trước e sai
SELECT C.ContactName, O.OrderID
FROM Orders O, Customers C
WHERE O.CustomerID = C.CustomerID AND
O.OrderID IN (
SELECT OrderID
FROM(
SELECT OD.OrderID, SUM(OD.UnitPrice * OD.Quantity) AS "Tổng giá trị"
FROM [Order Details] OD, Orders O
WHERE OD.OrderID = O.OrderID
GROUP BY OD.OrderID
) AS TMP
WHERE TMP.[Tổng giá trị] =(
SELECT TOP 1 SUM(OD.UnitPrice * OD.Quantity)
FROM [Order Details] OD, Orders O
WHERE OD.OrderID = O.OrderID
GROUP BY OD.OrderID
ORDER BY SUM(OD.UnitPrice * OD.Quantity) DESC
)
)
hình như không cần subquery vẫn tìm ra được
select top 1 sum(od.UnitPrice*od.Quantity) as [totalpriceofcustomer], o.CustomerID
from Orders o, [Order Details] od
where o.OrderID = od.OrderID
group by o.CustomerID
order by [totalpriceofcustomer] desc;
Nhưng mà làm theo cách này chỉ ra đc 1 khách hàng thôi ấy. Mình làm theo sub-query thì trả về 2 thông tin khách hàng họ có giá trị đơn hàng đều là lớn nhất á
@@nguyennhuquynh1953 Đề bài hỏi là tìm thông tin khách hàng có tổng giá trị đơn hàng lớn nhất chứ không phải là 1 đơn hàng.
-Nếu tìm thông tin khách hàng có đơn hàng đơn hàng giá trị lớn nhất thì group by theo orderid.
-Còn nếu tìm khách hàng có tổng giá trị đơn hàng lớn nhất thì bạn còn phải sum lại giá trị của tất cả đơn hàng mà họ đã mua sau đó tìm ra giá trị lớn nhất. Nên cái này phải group by theo customerid
Lâu rồi mình mới coi lại hên quá vẫn còn nhớ, giờ xem lại thấy hồi xưa mình viết như vậy cùi quá không lấy được tất cả thông tin, dùng sub query được một cái hay là mình có thể dùng select * để lấy được toàn bộ thông tin . Cám ơn bạn đã góp ý kiến cho mình nhe. Chúc bạn học tốt
@@nguyennhuquynh1953
select c.*, temp.total
from Customers c join (
select top 1 o.CustomerID ,sum(od.Quantity*od.UnitPrice) as total
from [Order Details] od join Orders o
on o.OrderID = od.OrderID
group by o.CustomerID
order by sum(od.Quantity*od.UnitPrice) desc
)as temp
on c.CustomerID = temp.CustomerID
@@nguyennhuquynh1953
select c.*
from Customers c
where c.CustomerID in (
select top 1 o.CustomerID
from [Order Details] od join Orders o
on o.OrderID = od.OrderID
group by o.CustomerID
order by sum(od.Quantity*od.UnitPrice) desc
)
16/08/2024: 9:54 Fri
SELECT c.CustomerID, c.ContactName
FROM [dbo].[Customers] c
INNER JOIN [dbo].[Orders] o
ON o.CustomerID = c.CustomerID
INNER JOIN [dbo].[Order Details] od
ON od.OrderID = o.OrderID
WHERE (od.Quantity * od.UnitPrice) = (
SELECT MAX(od.Quantity * od.UnitPrice)
FROM [dbo].[Order Details] od
)
2 rows
Mong anh có mấy bài giải hoặc là anh có thể để lại KẾT QUẢ IN RA BAO NHIÊU DÒNG Ạ
SELECT o.CustomerID,o.OrderID,o.ShipAddress, od.Quantity, od.UnitPrice, od.ProductID
FROM dbo.Customers c
LEFT JOIN dbo.Orders o
ON o.CustomerID = c.CustomerID
LEFT JOIN dbo.[Order Details] od
ON o.OrderID = od.OrderID
WHERE od.Quantity* od.UnitPrice = (
SELECT MAX (od.Quantity*od.UnitPrice)
FROM dbo.[Order Details] od
)
BT:
SELECT c.* ,(od.UnitPrice*od.Quantity) AS TotalPrice
FROM [dbo].[Customers] AS c
INNER JOIN [dbo].[Orders] AS o
ON c.CustomerID = o.CustomerID
INNER JOIN [dbo].[Order Details] od
ON o.OrderID = od.OrderID
WHERE (od.UnitPrice*od.Quantity) = (
SELECT MAX(od.UnitPrice*od.Quantity)
FROM [dbo].[Order Details] AS od
)
select c.ContactName
from Orders as o
inner join Customers as c
on o.CustomerID = c.CustomerID
inner join [Order Details] as od
on o.OrderID =od.OrderID
group by c.ContactName
having sum(UnitPrice*Quantity) = (select top 1 sum(UnitPrice*Quantity)
from [Order Details] as od
inner join Orders as o
on od.OrderID = o.OrderID
group by o.CustomerID
order by sum(UnitPrice*Quantity) desc)
Result: Horst Kloss
BT:
SELECT C.ContactName, OD.UnitPrice*OD.Quantity AS "Tổng giá trị đơn hàng"
FROM Orders AS O
INNER JOIN Customers AS C
ON O.CustomerID = C.CustomerID
INNER JOIN [Order Details] AS OD
ON OD.OrderID = O.OrderID
WHERE OD.UnitPrice*OD.Quantity = (
SELECT MAX(OD.UnitPrice*OD.Quantity)
FROM [Order Details] AS OD
);
SELECT C.*, OD.[UnitPrice]*OD.[Quantity] AS [TotalOrderValue]
FROM [dbo].[Customers] AS C
INNER JOIN [dbo].[Orders] AS O
ON C.[CustomerID]=O.[CustomerID]
INNER JOIN [dbo].[Order Details] AS OD
ON O.[OrderID]=OD.[OrderID]
WHERE OD.[UnitPrice]*OD.[Quantity] = (
SELECT MAX([UnitPrice]*[Quantity])
FROM [dbo].[Order Details] AS OD
)
select od.Quantity*od.UnitPrice as total, c.*
from [dbo].[Order Details] as od
join [dbo].[Orders] as o
on o.OrderID = od.OrderID
join [dbo].[Customers] as c
on c.CustomerID = o.CustomerID
where od.Quantity*od.UnitPrice in (
select max(od.Quantity*od.UnitPrice)
from [dbo].[Order Details] as od)
MAX(od.UnitPrice * od.Quantity) bạn có thể giải thích giúp mình chổ code này là gì được không ạ?
đề là lấy gia đơn hàng có giá trị cao nhất á bạn. thì mình subquery ở where để tìm ra địa chỗ có có đơn hàng có giá trị max thui. bạn cứ cắt câu subquey ở trong ra chạy riêng là sẽ hiểu
@@kjsaljl Mình cứ tưởng là dùng SUM(od.UnitPrice * od.Quantity) chứ, vậy SUM với MAX khi gán vào đây thì có nghĩ gì bạn giải thích giúp mình được không ạ
Sum là tính tổng á bạn. VD nhé: 1 col có 1 2 3 4 5. thì Sum của nó sẽ là 15. còn max sẽ là 5. kiếm đơn hàng lớn nhất thì là max
select distinct c.*
from Customers as c
join orders as o
on o.CustomerID = c.CustomerID
join [Order Details] as od
on o.OrderID = od.OrderID
where od.OrderID=(
select top 1 od.OrderID
from [Order Details] as od
group by od.OrderID
order by Sum(od.[Quantity]*od.[UnitPrice]) desc
)
Em gui loi giai bai tap
--Lay thong tin ve cac khach hang co tong gia tri don hang lon nhat
SELECT DISTINCT *
FROM Customers c
JOIN Orders o
ON c.CustomerID = o.CustomerID
JOIN [Order Details] od
ON od.OrderID = o.OrderID
WHERE o.OrderID IN(
SELECT TOP 1 od.OrderID
FROM [Order Details] od
GROUP BY od.OrderID
ORDER BY SUM(od.UnitPrice*od.Quantity) DESC
);
Select *
From Customers as c
inner join Orders as o
on c.CustomerID = o.CustomerID
inner join [Order Details] as od
on o.OrderID = od.OrderID
Where (od.Quantity * od.UnitPrice) = (
Select Max(od.UnitPrice * od.Quantity) as[Invoice]
From [Order Details] as od
)
SELECT c.*
FROM [dbo].[Orders] o
JOIN [dbo].[Customers] c
ON c.CustomerID= o.CustomerID
WHERE o.OrderID IN (
SELECT [OrderID]
FROM [dbo].[Order Details]
WHERE [UnitPrice]*[Quantity]= (
select MAX([UnitPrice]*[Quantity]) AS "Giá đơn"
from [dbo].[Order Details]
)
) ;
SELECT c.*
FROM [Customers] as c
INNER JOIN [Orders] as o ON c.CustomerID = O.CustomerID
INNER JOIN [Order Details] as od ON od.OrderID = o.OrderID
WHERE od.Quantity * od.UnitPrice = (
SELECT MAX(od.[UnitPrice] * od.[Quantity] ) AS GIATRIDONHANG
FROM [Order Details] as od
)
so fk hard maybe i'm not smart enough
Em gửi đáp án ạ
SELECT o.OrderID, c.ContactName, SUM (od.UnitPrice * od.Quantity) Total
FROM Customers c
INNER JOIN Orders o ON o.CustomerID = c.CustomerID
INNER JOIN [Order Details] od ON od.OrderID = o.OrderID
GROUP BY o.OrderID, c.ContactName
HAVING SUM (od.UnitPrice * od.Quantity) = (
SELECT MAX([Total MAX])
FROM (SELECT SUM(od.UnitPrice*od.Quantity) AS [Total MAX]
FROM [Order Details] od
GROUP BY od.OrderID
) AS Groups);
Em gửi anh câu trả lời
SELECT TOP 1 C.CustomerID,C.ContactName, P.ProductName, SUM (P.UnitPrice*OD.Quantity) AS "Total"
FROM DBO.[Order Details] OD
INNER JOIN DBO.Products P
ON P.ProductID = OD.ProductID
INNER JOIN DBO.Orders O
ON O.OrderID = OD.OrderID
INNER JOIN DBO.Customers C
ON C.CustomerID = O.CustomerID
GROUP BY C.CustomerID,C.ContactName, P.ProductName
ORDER BY Total DESC
MAX(od.UnitPrice * od.Quantity) bạn có thể giải thích giúp mình chổ code này là gì được không ạ?
select x.*,t.price
from [dbo].[Customers] as x
inner join (
select top 1 c.CustomerID,sum(od.[UnitPrice]*od.[Quantity]) as price
from [dbo].[Customers] as c
inner join [dbo].[Orders] as o
on o.CustomerID=c.CustomerID
inner join [dbo].[Order Details] as od
on o.OrderID=od.OrderID
group by c.CustomerID
order by price desc) as t on t.CustomerID=x.CustomerID
em gửi đáp án ạ: SELECT c.CustomerID, c.ContactName, SUM(od.Quantity * od.UnitPrice * (1-od.Discount)) as Total
FROM Orders o JOIN [Order Details] od ON o.OrderID = od.OrderID
JOIN Customers c ON c.CustomerID = o.CustomerID
GROUP BY c.CustomerID, c.ContactName
HAVING SUM(od.Quantity * od.UnitPrice * (1-od.Discount)) >= ALL
(SELECT SUM(od.Quantity * od.UnitPrice * (1-od.Discount)) as Total
FROM Orders o JOIN [Order Details] od ON o.OrderID = od.OrderID
JOIN Customers c ON c.CustomerID = o.CustomerID
GROUP BY c.CustomerID, c.ContactName)
SELECT c.*
FROM dbo.Customers AS c
WHERE c.CustomerID IN
( SELECT CustomerID
FROM dbo.Orders
WHERE OrderID IN
( SELECT OrderID FROM dbo.[Order Details]
WHERE (UnitPrice*Quantity) = (SELECT MAX(UnitPrice*Quantity)
FROM dbo.[Order Details]) ) );
🗣🗣
SELECT *
FROM Customers c
WHERE c.CustomerID IN (
SELECT o.CustomerID
FROM Orders o
INNER JOIN [Order Details] od
ON o.OrderID = od.OrderID
GROUP BY o.OrderID, o.CustomerID
HAVING SUM(od.UnitPrice * od.Quantity) = (SELECT TOP 1 SUM(od.UnitPrice * od.Quantity)
FROM [Order Details] od
GROUP BY od.OrderID
ORDER BY SUM(od.UnitPrice * od.Quantity) DESC)
)
SELECT TOP 1 c.*
FROM Customers c
INNER JOIN Orders o
ON c.CustomerID = o.CustomerID
WHERE o.OrderID = (
SELECT TOP 1 OrderID
FROM [Order Details]
GROUP BY OrderID
ORDER BY SUM(Quantity * UnitPrice) DESC
);
SELECT TOP 10 od.OrderID,C.*
FROM [dbo].[Order Details] OD
INNER JOIN [dbo].[Orders] O
ON OD.OrderID = O.OrderID
INNER JOIN [dbo].[Customers] C
ON C.CustomerID =O.CustomerID
WHERE OD.Quantity*OD.UnitPrice-OD.Discount IN
(SELECT TOP 10 ( Quantity*UnitPrice-Discount) AS TOTAL
FROM [dbo].[Order Details]
ORDER BY TOTAL DESC
)
ORDER BY OD.Quantity*OD.UnitPrice-OD.Discount DESC;
SELECT C.CustomerID,C.CompanyName,C.ContactName,O.OrderID
FROM [dbo].[Customers] AS C
INNER JOIN [dbo].[Orders] AS O
ON O.CustomerID = C.CustomerID
WHERE [OrderID] IN (
SELECT TOP 1 OrderID
FROM [dbo].[Order Details]
GROUP BY OrderID
ORDER BY SUM([UnitPrice]*[Quantity]) DESC);