私は現在、出版社のリスト、彼らの総収入、総支払い、そして彼らの純利益を要約することを中心に展開している問題を解決しようとしています。これを少し複雑にしているのは、総支払い額がケースステートメントに左右されることです(ロイヤルティのより高い価値から選択する必要があるため)。このcaseステートメントは完全に問題なく、下のSQLFiddleリンクにある前のクエリで実行されました。私の問題は、必要なものに対処するクエリがほぼ完成しているのに、それを完了するためにどのような修正を行うべきかわからないことです。助けていただければ幸いです!そして、あなたがそれを機能させるならば、あなたは合法的な命の恩人になるでしょう!
Select name,
SUM(book.msrp) AS 'Total Revenue',
SUM(EarningByBook) AS 'Total Payouts',
SUM(book.msrp)-SUM(EarningByBook) AS 'Net Profit'
FROM
(SELECT publisher.name, book.msrp,
(SELECT
CASE WHEN preferred_royalties > standard_royalties
THEN preferred_royalties*copies_sold
ELSE standard_royalties*copies_sold END
AS 'EarningByBook',
copies_sold ,
YEAR(CURDATE())-YEAR(date_published) Years
INNER JOIN book ON publisher.id = book.publisher_id)
FROM author A
JOIN book B ON A.id=B.author_id
JOIN publisher P ON B.publisher_id=P.id)
From publisher
INNER JOIN book ON publisher.id = book.publisher_id) Z
GROUP BY
name;
SQLフィドルは次のとおりです:https://dbfiddle.uk/?rdbms = mysql_8.0& fiddle = b0015a0a4286f9b2c064bbd65525faa5&hide = 13312
期待される出力は次のようになります
出版社 | 総収入 | 総支払い | 純利益 |
---|---|---|---|
名前 | 20000 | 1500 | 18500 |
名前 | 15000 | 1000 | 14000 |
すべての内部選択を単一のSELECT
サブクエリにフラット化することを検討してください。
SELECT sub.publisher
, SUM(sub.msrp) AS 'Total Revenue'
, SUM(sub.EarningByBook) AS 'Total Payouts'
, SUM(sub.msrp) - SUM(sub.EarningByBook) AS 'Net Profit'
FROM
(SELECT
P.`name` AS publisher
, CASE
WHEN A.preferred_royalties > P.standard_royalties
THEN A.preferred_royalties * B.copies_sold
ELSE P.standard_royalties * B.copies_sold
END AS EarningByBook
, YEAR(CURDATE()) - YEAR(B.date_published) AS Years
, B.msrp
, B.copies_sold
FROM author A
INNER JOIN book B
ON A.id = B.author_id
INNER JOIN publisher P
ON B.publisher_id = P.id
) AS sub
GROUP BY
sub.publisher;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加