Předělání SQL dotazu

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

skb128
nováček
Příspěvky: 2
Registrován: říjen 13
Pohlaví: Muž
Stav:
Offline

Předělání SQL dotazu

Příspěvekod skb128 » 28 říj 2013 15:00

Ahoj,
měl jsem za úkol vymyslet několik netriviálních dotazů na databázi Northwind a ty pak zapsat dvěma různými způsoby. Ideálně využitím vnořených selectů, které ovšem i přes veškerou snahu stále absolutně nezvládám. Nenašel by se tady někdo, kdo by zvládl následující dotazy předělat pomocí vnořených selectů tak, aby mi vracely stejný výsledek? Předem děkuji.

Kód: Vybrat vše

--1. Vypište jména společností z Německa nebo Brazílie, které učinily nejméně 10 objednávek, a počet těchto objednávek. Seřaďte vzestupně.

SELECT CompanyName AS 'Jméno společnosti', COUNT(Orders.OrderID) AS 'Počet objednávek'
FROM Customers LEFT OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID
WHERE Country LIKE 'Germany' OR Country LIKE 'Brazil'
GROUP BY CompanyName HAVING COUNT(Orders.OrderID) >= 10
ORDER BY 'Počet objednávek' ASC;


--2. Vypište příjem z 20 nejvýnosnějších objednávek po aplikaci slevy, ID těchto objednávek a ID, jméno a příjmení zaměstnanců, kteří danou objednávku zpracovali. Setřiďte sestupně dle příjmu. Příjem zaokrouhlete na 1 desetinné místo.

SELECT TOP 20 [Order Details].OrderID AS 'ID objednávky', Orders.EmployeeID AS 'ID zaměstnance', Employees.FirstName AS 'Jméno', Employees.LastName AS 'Příjmení', ROUND(SUM([Order Details].UnitPrice * [Order Details].Quantity - ([Order Details].Quantity * [Order Details].UnitPrice * [Order Details].Discount)), 1) AS 'Příjem'
FROM [Order Details] LEFT OUTER JOIN Orders ON [Order Details].OrderID = Orders.OrderID LEFT OUTER JOIN Employees ON Employees.EmployeeID = Orders.EmployeeID
GROUP BY [Order Details].OrderID, Orders.EmployeeID, Employees.FirstName, Employees.LastName
ORDER BY 'Příjem' DESC;

Reklama
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Předělání SQL dotazu

Příspěvekod CZechBoY » 28 říj 2013 18:34

Zdravím,
to je jednoduchý :-) vezmeš sloupec, co chceš vybrat z joinu a vybereš ho přes vnořený dotaz.
Neznám Northwind databázi, dělám pouze s MySQL.

Kód: Vybrat vše

SELECT CompanyName AS 'Jméno společnosti',
   SELECT(COUNT(OrderID) FROM Orders WHERE Customers.CustomerID = Orders.CustomerID) AS 'Počet objednávek'
FROM Customers
WHERE Country LIKE 'Germany' OR Country LIKE 'Brazil'
GROUP BY CompanyName HAVING 'Počet objednávek' >= 10
ORDER BY 'Počet objednávek' ASC;


To druhý nevím jak se v Northwindu dělá, v MySQL není TOP operátor, dělá se to přes LIMIT klauzuli. Určitě to dokážeš sám přepsat po přepisu toho prvního dotazu ;-)
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

skb128
nováček
Příspěvky: 2
Registrován: říjen 13
Pohlaví: Muž
Stav:
Offline

Re: Předělání SQL dotazu

Příspěvekod skb128 » 28 říj 2013 19:06

No ta závorka by nejspíš měla být před SELECT a ne před COUNT, ale i tak mi to potom nejde. Pise to "Column 'Customers.CustomerID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause."

Ať dělám co dělám nedaří se mi prostě ten dotaz poskládat tak, aby mi fungoval. SQL se učím zhruba týden, ale tomuhle nemůžu přijít stále na kloub. Ale i tak dík, budu to dál zkoušet.

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Předělání SQL dotazu

Příspěvekod CZechBoY » 28 říj 2013 19:11

jo soráč, psal jsem to na rychlo :(
Tak to nevim, normálně by to v MySQL prošlo, zde už nepomohu :(
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 8 hostů