首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在两个表之间获得最高的收入?

如何在两个表之间获得最高的收入?
EN

Stack Overflow用户
提问于 2021-01-27 09:11:04
回答 1查看 42关注 0票数 0

我有三个表,如果版税价值取决于首选版税高于或低于标准版税,我如何获得终生收益价值?

这是使用SELECT IF的情况吗?

另外,根据他们第一次发表作品的日期到今天,我如何获得他们的平均年收入?

假设:作者总是收到他们喜欢的版税中最高的,或者出版商的标准版税。

我目前的查询是错误的,因为它没有考虑到它会在首选或标准之间选择哪个版税来源。我不确定该使用哪条Select语句。

当前的SQL文件系统https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=7afcd23342ffb024a2a7f2d2a270d0c1

代码语言:javascript
复制
**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

这就是我想出来的,但我知道这是错误的。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-27 11:20:17

如果我们至少有示例数据,理解起来会容易得多,但我想这个想法是一个开始:

代码语言:javascript
复制
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_royaltiesstandard_royalties中较大的值来计算收益。因此,我执行的基本查询如下:

代码语言:javascript
复制
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表达式选择较大的值并将其与copies_sold相乘。我认为这是非常直接的。然后每本书我都用YEAR(CURDATE())-YEAR(date_published)的直接减法来计算年份差。完成后,我将其作为子查询,然后进行计算。

Here is the updated fiddle

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65911554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档