mysql - 如何在两张桌子之间获得最高收入?
问题描述
我有三张表,如果特许权使用费取决于优先特许权使用费高于或低于标准特许权使用费,我将如何获得终生收益价值?
这会是使用 SELECT IF 的情况吗?
另外,根据他们第一次发表作品的日期到今天,我将如何获得他们每年的平均收入?
假设:作者总是收到他们喜欢的版税或出版商的标准版税中最大的。
我当前的查询很遥远,因为它没有说明它将在首选或标准之间选择哪个版税来源。我不确定要使用哪个 Select 语句。
当前的 SQL 小提琴 https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=7afcd23342ffb024a2a7f2d2a270d0c1
**author**
id*
first_name
last_name
date_of_birth
preferred_royalties
**book**
id*
name
date_published
msrp
copies_sold
author_id
publisher_id
**publisher**
id*
name
standard_royalties
这是我想出的,但我知道这是错误的。
SELECT
author.first_name,
author.last_name,
(SELECT
SUM (
author.preferred_royalties * book.copies_sold
) AS lifetime earnings
FROM
author
RIGHT JOIN book
ON author.id = book.author_id)
(SELECT
SUM (
(
author.preferred_royalties * book.copies_sold
) / diffdate (yy, book.date_published, getdate ()) AS average earnings per YEAR FROM author
RIGHT JOIN book
ON author.id = book.author_id
)
FROM
author
RIGHT JOIN book
ON author.id = book.author_id
GROUP BY book.author_id
解决方案
如果我们至少有示例数据会更容易理解,但我想这个想法是一个开始:
SELECT first_name, last_name,
SUM(EarningByBook) AS 'Lifetime Earning',
SUM(copies_sold) AS 'Copies Sold',
SUM(years) as 'Total Years',
SUM(EarningByBook)/SUM(Years) AS 'AVG earning per year'
FROM
(SELECT first_name, last_name,
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
FROM author A
JOIN book B ON A.id=B.author_id
JOIN publisher P ON B.publisher_id=P.id) V
GROUP BY
first_name, last_name;
preferred_royalties
我从您的问题中可以理解的是,首先您要根据和之间较大的值来计算收益standard_royalties
。因此,我所做的基本查询如下:
SELECT first_name, last_name,
/*here*/
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
FROM author A
JOIN book B ON A.id=B.author_id
JOIN publisher P ON B.publisher_id=P.id
因此,CASE
表达式是在较大的那个之间进行选择,并将其与copys_sold 相乘。我认为这很简单。然后每本书我都使用直接减法来计算年份差异 year YEAR(CURDATE())-YEAR(date_published)
。完成后,我将其作为子查询然后进行计算。
推荐阅读
- c# - InvalidOperationException:传递到 ViewDataDictionary 的模型项的类型为“System.Collections.Generics - 如何解决此问题?
- firebase - Firestore 索引不起作用,但它已经创建
- python - 在 Jupyter 中绘制条形图
- r - R - 从 g(x,y)dy 的积分创建函数 f(x)
- python - 如何解决卷积模型的维度输入?
- asp.net - 我可以启动我的网站项目,并让它在同一个解决方案中使用 Web 应用程序项目吗?
- asp.net-core - 将网站从 ASP.NET Core 3.1 升级到 5.0 后的登录重定向循环
- mysql - 强制停止运行ActiveRecord,避免mysql max_execution_time
- reporting-services - SSRS 的 Nevron 图表 - 混合标签布局和中心文本
- go - 使用 dlv 调试“go get”