MySQL: Select mit MAX() von sub-query mit COUNT()

Bevor Sie Kennzeichnen diese als Duplikat bitte werfen Sie einen Blick auf diese SQLFiddle.

Habe ich dieses schema:

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');

Den sub-Abfrage:

  SELECT c.author_id,COUNT(*) book_count FROM book c
  GROUP BY c.author_id

hat ein Ergebnis:

| AUTHOR_ID | BOOK_COUNT |
--------------------------
|         3 |          1 |
|        12 |          2 |
|        98 |          1 |

Nun, der schwierige Teil hier ist das Ergebnis dieser Abfrage:

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

ist diese:

| MAX(BOOK_COUNT) | AUTHOR_ID |    FN |     LN |
------------------------------------------------
|               2 |         3 | name3 | lname3 |

sollte wie folgt sein:

| MAX(BOOK_COUNT) | AUTHOR_ID |    FN |     LN |
------------------------------------------------
|               2 |        12 | name1 | lname1 |

Was denken Sie ist falsch bei der Abfrage?

Wie bekommen Sie FN und LN in Ihrem Ergebnis ohne Auswahl?
In a.*.

InformationsquelleAutor Christian Mark | 2013-08-05

Schreibe einen Kommentar