Софтуерно Инженерство
Loading...
+ Нов въпрос
Victuss avatar Victuss 18 Точки

[Homework] Functions, Triggers and Transactions - Problem 10. People with Balance Higher Than

Някаква идея защо това не минава в judge(5 грешни отговора). Аз ли не разбирам условието или нещо по кода е сгрешено:

CREATE PROCEDURE usp_GetHoldersWithBalanceHigherThan(@balanceThreshold DECIMAL(19,4))
AS
BEGIN
	WITH TotalBalanceOnAllAccounts_CTE(Id, TotalBalance) AS
	(
		SELECT a.AccountHolderId, SUM(a.Balance)
		FROM Accounts AS a
		GROUP BY a.AccountHolderId	
	)
	SELECT ah.FirstName AS [First Name], ah.LastName AS [Last Name]
	FROM AccountHolders AS ah
	INNER JOIN TotalBalanceOnAllAccounts_CTE AS tboaa
	ON ah.Id = tboaa.Id
	WHERE tboaa.TotalBalance > @balanceThreshold;
END

 

Тагове:
1
Databases Basics
msmilkoff avatar msmilkoff 341 Точки

Защо ти е допълнителната таблица? Просто правиш обикновен inner join на Accounts и AccountHolders По Id, групираш ги по FirstName и LastName и филтрираш по SUM(Accounts.balance) > @balanceThreshold. Освен това трябва да ползваш MONEY, а не DECIMAL

1
Victuss avatar Victuss 18 Точки

Така минава в judge, но при съвпадение на имена ще сумира за различни Id-та и ще даде грешни резултати. Затова трябва и Id-то задължително да участва в групирането. Като го добавя и него обаче, не минават тестовете. :(

0
msmilkoff avatar msmilkoff 341 Точки

Такива задачи измислят...

0
Victuss avatar Victuss 18 Точки

Задачата е супер, но решението е грешно. :) Явно има повтарящи се имена в базата и това трябва да се вземе предвид.

0
Xzahn avatar Xzahn 34 Точки

Аз така я реших. Дава ми грешка при компилация. Нямам представа защо. 

CREATE PROCEDURE usp_GetHoldersWithBalanceHigherThan
(
	@sum MONEY
)
AS
BEGIN 
	SELECT FirstName, LastName FROM
	(
		SELECT FirstName, LastName, SUM(l.Amount) AS TotalBalance FROM Customers AS c
		JOIN Loans AS l
		ON l.CustomerID = c.CustomerID
		GROUP BY c.FirstName, c.LastName
	) AS tb
	WHERE tb.TotalBalance > @sum
END

П.С. Виждам, че ползваш различни таблици. Аз използвах базата от Exam Preparation-а.

П.С. 2 Пуснах това и мина всички тестове:

CREATE PROCEDURE usp_GetHoldersWithBalanceHigherThan
(
	@sum MONEY
)
AS
BEGIN 
	SELECT FirstName AS [First Name], LastName AS [Last Name] FROM
	(
		SELECT FirstName, LastName, SUM(a.Balance) AS TotalBalance FROM AccountHolders AS ah
		JOIN Accounts AS a
		ON a.AccountHolderId = ah.Id
		GROUP BY ah.FirstName, ah.LastName
	) AS tb
	WHERE tb.TotalBalance > @sum
END

 

0
15/10/2016 20:33:13