Mysql MAX和Count之间的减法运算

Mysql MAX和Count之间的减法运算,mysql,sql,Mysql,Sql,我想得到一个作者写的书的最大数量和每个作者写的书的数量之间的差异 SELECT count(book_name) contar, (MAX(C.qty) - count(book_name)) final FROM (select B.author_id, count(book_name) qty FROM author A ,BOOK B WHERE A.author_id = B.author_id GROUP BY b.author_id) C ,

我想得到一个作者写的书的最大数量和每个作者写的书的数量之间的差异

SELECT  count(book_name) contar, (MAX(C.qty) - count(book_name)) final
FROM (select B.author_id, count(book_name) qty 
     FROM author A ,BOOK B 
     WHERE A.author_id = B.author_id 
     GROUP BY b.author_id) C , 
author A, 
BOOK B 
WHERE A.author_id = B.author_id 
    AND B.author_id=C.Author_id
    AND date_release BETWEEN NOW() - INTERVAL 20 YEAR AND NOW()
GROUP BY c.author_id
HAVING contar > 0
如您所见,有两个表
BOOK
,分别有
BOOK\u id
author\u id
BOOK\u name
date\u release
,和表
author
author\u id,
author\u name
author\u lastname
日期

我得到了这个结果

但我需要像这样的东西

--------+-------+--+
| contar | final |  |
+--------+-------+--+
|      1 |    -4 |  |
|      2 |    -3 |  |
|      5 |     0 |  |
|      1 |    -4 |  |
+--------+-------+--+ 

试试这个。我让每个数字等于一个变量,然后减去这些变量。但是,变量将显示为列

SELECT  count(book_name) contar, 
        @max:=( MAX(C.qty) ), 
        @bookcount:=( count(book_name) ), 
        @final:= @max-@bookcount
FROM (select B.author_id, 
             count(book_name) qty 
      FROM author A , BOOK B 
      WHERE A.author_id = B.author_id 
      GROUP BY b.author_id) C , 
      author A, 
      BOOK B 
WHERE A.author_id = B.author_id 
  AND B.author_id = C.Author_id 
  AND date_release BETWEEN NOW() - INTERVAL 20 YEAR 
                       AND NOW()
GROUP BY c.author_id
HAVING contar > 0

问题是,
MAX(C.qty)
是按每个作者计算的,因为查询具有
GROUP BY C.author\u id
。对于整个子查询,只需计算一次该总数

在获取每个作者的图书数量时,也不需要加入
作者
,因为作者ID位于
图书

SELECT  count(book_name) contar, (max_qty - count(book_name)) final
FROM (SELECT MAX(qty) AS max_qty
      FROM (select count(book_name) qty 
            FROM BOOK B 
            GROUP BY b.author_id) t
     ) C 
CROSS JOIN author A
JOIN book B ON A.author_id = B.author_id 
WHERE date_release BETWEEN NOW() - INTERVAL 20 YEAR AND NOW()
GROUP BY A.author_id

而且没有必要让
拥有contar>0
,因为没有书籍的作者将不包括在
连接中

主查询只统计过去20年的书籍,而子查询统计所有书籍是否正确?推广使用explict
连接
sintaxis,Aaron Bertrand写了一篇很好的文章。你能解释一下Mac的数量应该是多少吗?总量是有意义的,但不是最大值。您可以在选择中使用集合吗?您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near的正确语法set@JuanCarlosOropeza你是对的。我的想法就像一个存储过程@CamiloCipagauta现在试试。我把布景放在那里出错了。它现在应该可以工作了。我尝试修复它,但括号不匹配。我必须在第二个子查询中添加别名,但可以!谢谢