mysql – MAX和Count之间的替代
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – MAX和Count之间的替代,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1335字,纯文字阅读大概需要2分钟。
内容图文
![mysql – MAX和Count之间的替代](/upload/InfoBanner/zyjiaocheng/893/d7ac820ce80241e592dce61d543f78b9.jpg)
我希望得到作者所写书籍的最大数量与每位作者所写的数量之间的差异.
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.您需要为整个子查询计算此总计一次.
由于作者ID在BOOK中,因此在获取每位作者的书籍数量时也无需加入AUTHOR.
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之间的替代全部内容,希望文章能够帮你解决mysql – MAX和Count之间的替代所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。