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现在试试。我把布景放在那里出错了。它现在应该可以工作了。我尝试修复它,但括号不匹配。我必须在第二个子查询中添加别名,但可以!谢谢