我想知道一位作者的最大图书数量与每位作者的图书数量之差。
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_id
、author_id
、book_name
、date_release
和表 AUTHOR
author_id
、author_name
、author_lastname
、date_birth
.
我得到了这个结果
但是我需要类似的东西
--------+-------+--+
| contar | final | |
+--------+-------+--+
| 1 | -4 | |
| 2 | -3 | |
| 5 | 0 | |
| 1 | -4 | |
+--------+-------+--+
最佳答案
问题是 MAX(C.qty)
是按作者计算的,因为查询有 GROUP BY c.author_id
。您只需为整个子查询计算一次总数。
在获取每个作者的书籍数量时,也不需要加入 AUTHOR
,因为作者 ID 在 BOOK
中。
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
并且不需要 HAVING contar > 0
,因为没有书籍的作者将不会包含在 JOIN
中。
关于mysql - MAX与Count相减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41230307/