在将其标记为重复之前,请先看一下此SQLFiddle。
我有这个架构:
CREATE TABLE book(book_id int,
book_name varchar(100),
author_id int,
editor_id varchar(100),
isbn varchar(100));
INSERT INTO book
VALUES
(1 , 'Book1 Title' , 12 , 'Editor1' , '8000-9000' ),
(2 , 'Book2 Title' , 98 , 'Editor1' , '8000-9001' ),
(1 , 'Book1 Title' , 12 , 'Editor1' , '8000-9002' ),
(3 , 'Book3 Title' , 3 , 'Editor1' , '8000-9003' );
CREATE TABLE author(author_id int,
fn varchar(100),
ln varchar(100));
INSERT INTO author
VALUES
(12, 'name1','lname1'),
(98,'name2','lname2'),
(3,'name3','lname3');
子查询:
SELECT c.author_id,COUNT(*) book_count FROM book c
GROUP BY c.author_id
结果:
| AUTHOR_ID | BOOK_COUNT |
--------------------------
| 3 | 1 |
| 12 | 2 |
| 98 | 1 |
现在,这里最棘手的部分是此查询的结果:
SELECT MAX(book_count),a.* FROM
author a,(
SELECT c.author_id,COUNT(*) book_count FROM book c
GROUP BY c.author_id
) b
where a.author_id = b.author_id
这是:
| MAX(BOOK_COUNT) | AUTHOR_ID | FN | LN |
------------------------------------------------
| 2 | 3 | name3 | lname3 |
应该是这样的:
| MAX(BOOK_COUNT) | AUTHOR_ID | FN | LN |
------------------------------------------------
| 2 | 12 | name1 | lname1 |
您认为查询中有什么问题?
而不是MAX()
您可以简单地使用LIMIT
相同。也可以JOIN
改用。
SELECT book_count,a.author_id,a.fn, a.ln
FROM author a
JOIN
(
SELECT c.author_id,COUNT(*) book_count FROM book c
GROUP BY c.author_id
) b
ON a.author_id = b.author_id
ORDER BY book_count DESC LIMIT 1
输出:
| BOOK_COUNT | AUTHOR_ID | FN | LN |
-------------------------------------------
| 2 | 12 | name1 | lname1 |
编辑:
如果要使用MAX()
它,则必须使用如下子查询:
SELECT book_count,a.author_id,a.fn, a.ln
FROM author a
JOIN
(
SELECT c.author_id,COUNT(*) book_count FROM book c
GROUP BY c.author_id
) b
ON a.author_id = b.author_id
WHERE book_count =
(SELECT MAX(book_count)
FROM
(
SELECT c.author_id,COUNT(*) book_count FROM book c
GROUP BY c.author_id
) b )
编辑2:
除了LIMIT
在外部查询中使用之外,您也可以在内部查询中使用它:
SELECT book_count,a.author_id,a.fn, a.ln
FROM author a
JOIN
(
SELECT c.author_id,COUNT(*) book_count FROM book c
GROUP BY c.author_id
ORDER BY COUNT(*) DESC LIMIT 1
) b
ON a.author_id = b.author_id
问题内容: 我需要您的帮助,这是我的SQL查询: 这是我的结果: 现在我必须计算第一个查询的结果! 问题答案: 您可以将查询换成另一个: 参见带有演示的SQL Fiddle 为了使其工作,需要一个列别名,并且您必须为子查询本身提供一个别名。
问题内容: 我能够同时获取mysql查询结果的值和行。 但是我在努力获得查询的单个输出。例如: 我需要显示结果。但是我没有得到结果。 我尝试了以下方法: 但是我没有成功显示(获取)实际值。 问题答案: 您需要使用关键字为聚合设置别名,以便从中进行调用
我刚开始冬眠。我有两张桌子,有一对多的关系。有两个表格: 这是一个父类,它与图像表有一对多关系 现在我想使用父类的id(即:pashminaId)从类中选择一个 如: 选择IMAGE_NAMETBL_IMAGEPASHMINA_ID='some_digit'; 我怎么能在图像类中传递pashminaId,因为没有它只有一个父类的对象创建。 那么,我如何在Hibernate中实现这一点? 谢谢!希望
我能够同时获得mysql查询结果的值和行。 但我很难获得查询的单个输出。例如: 我需要显示结果。但我没有得到结果。 我尝试了以下几种方法: 但我没有成功地显示(获取)实际值。
问题内容: 这个MySQL查询的复杂度是多少 表格中的条目数计数是否存储在某处并在每次插入或删除行时更新?如果是这种情况,则复杂度应为O(1)。 问题答案: 这取决于存储引擎。 对于MyISAM,将为每个表存储总行数,因此将存储操作O(1)。它只需要读取此值。 对于InnoDB,不存储总行数,因此需要完整扫描。这是O(n)操作。 从手册: 不保留表中行的内部计数。(实际上,由于多版本控制,这会有些
我必须计算ARPU(收入/#用户),但我得到了这个错误: 子查询使用外部查询第7行的未分组列“usage_records.date”:WHERE created_at<=date_trunc('day',usage_records.d...^) null