任何人都可以通过汇总和排名查询帮助我进行分组吗?

时间:2013-12-14 08:46:08

标签: mysql sql ranking

我需要为每个出版商展示三本最短的书。我不能报告任何我没有页数的书籍;不报告我们没有书籍的任何出版商。一些出版商可能会 只有1或2本书。显示书名的前25个字符。寻找第三名的关系是可选的,但更有趣。报告以发布商ID和排名顺序显示。

这是所需的输出: enter image description here

set @rownum:= 0;
SELECT publ_id
     , title
     , page_count
     , @rownum:= @rownum + 1 as Rank
 FROM a_bkinfo.books 
 WHERE publ_id IN
       ( 
         SELECT publ_id
           FROM a_bkinfo.books
          GROUP BY publ_id
         HAVING SUM(page_count) =
                (
                  SELECT max(page_count)
                    FROM (  
                           SELECT publ_id
                                , sum(page_count) as page_count
                             FROM a_bkinfo.books 
                            GROUP BY publ_id
                         ) t
                )
       );

这是创建表:

-- create books
create table a_bkinfo.books (
    book_id           integer          not null
  , title             varchar(75)      not null 
  , publ_id           integer          null
  , year_publd        integer          not null
  , isbn              varchar(17)      null
  , page_count        integer          null  
  , list_price        numeric(6,2)     null  
  , constraint bk_books_pk             primary key (book_id)
  , constraint bk_books_publ_fk        foreign key(publ_id) 
               references a_bkinfo.publishers  (publ_id)
  , constraint book_id_range           check (book_id > 1000)
  , constraint bk_page_count_ck        check (page_count >= 0)
  , constraint bk_price_ck             check (list_price >= 0)             
  , constraint bk_books_year_ck        check (year_publd >= 1850)
)engine = INNODB;

以下是插页:

-- books  
insert into a_bkinfo.books values (1101, 'Programming SQL Server with VB.NET',              9000, 2002, '0735615357',    300, 59.99);
insert into a_bkinfo.books values (1102, 'Practical Standards for VB.NET',                  9000, 2003, '0735613568',    250, 49.99);
insert into a_bkinfo.books values (1103, 'Selected Poems',                                  9456, 1949,  null,           125, 12.00);
insert into a_bkinfo.books values (1104, 'Sibley Guide to Bird Life and Behavior',          9102, 2001, '0679451234',    604, 45.00);
insert into a_bkinfo.books values (1105, 'SQL:1999 Relational Language Concepts',           9745, 2002, '1558604561',    450, 59.95);
insert into a_bkinfo.books values (1106, 'SQL for Smarties',                                9745, 1995, '1558603239',    250, 29.00);
insert into a_bkinfo.books values (1107, 'SQL Puzzles and Answers',                         9745, 1997, '1558604537',    325, 25.00);
insert into a_bkinfo.books values (1108, 'Database Systems',                                9325, 1996,  null,           680, 39.95);
insert into a_bkinfo.books values (1109, 'Intro to DB Systems-7th Ed',                      9325, 2000, '0201385902',    650, 80.00);
insert into a_bkinfo.books values (1110, 'Adv SQL:1999 Object_Relational Features',         9745, 2002, '1558606077',    520, 59.95);


insert into a_bkinfo.books values (1128, 'Temporal Data and the Relational Model',          9325, 2003, 'na',            275, 49.95);
insert into a_bkinfo.books values (1133, 'Leaves of Grass',                                 9623, 1902,  null,           125, 19.95);
insert into a_bkinfo.books values (1142, 'Relational Database Theory',                      9521, 1993,  null,           879, 95.00);
insert into a_bkinfo.books values (1161, 'SQL Programming Style',                           9745, 2005, '0120887975',    780, 35.00);
insert into a_bkinfo.books values (1162, 'Trees and Hierarchies',                           9745, 2004, '1558609202',    350, 35.00);
insert into a_bkinfo.books values (1180, 'MySQL Database Design and Tuning',                9825, 2005, '9780672234650', 400, 49.99);
insert into a_bkinfo.books values (1175, 'MySQL in a Nutshell',                             9822, 2008, '9780596514331', 538, 34.99);
insert into a_bkinfo.books values (1182, 'MySQL Cookbook',                                  9822, 2007, '9780596527082', 918, 49.99);
insert into a_bkinfo.books values (1185, 'MySQL Stored Procedures',                         9822, 2007, '9780596100896', 595, 49.99);
insert into a_bkinfo.books values (1184, 'MySQL Developer''s Library',                      9325, 2009, '9780672329388', 650, 49.99);
insert into a_bkinfo.books values (1301, 'ADO and Oracle Workbook',                         9000, 2002, '0265615357',      0, 59.99);
insert into a_bkinfo.books values (1302, 'ADO: the ebook',                                  9000, 2002, '0852515358',   null, 49.99);
insert into a_bkinfo.books values (1303, 'Rainbows and Rainbows',                           9521, 2002, '0657895157',   null, 59.99);
insert into a_bkinfo.books values (1304, 'Stories of Discoveries',                          9325, 2002, '0777788887',    300, 59.99);
insert into a_bkinfo.books values (1305, 'Journeys Through Flatland',                       9325, 1958, '0387515357',    100,  9.99);
insert into a_bkinfo.books values (1306, 'Myths of SQL',                                    9664, 2000, '0454615027',   2895,259.99);



insert into a_bkinfo.books values (1188, 'SQL for MySQL Developers',                        9325, 2007, '9780314973851', 105, 49.99);
insert into a_bkinfo.books values (1199, 'SQL is Fun',                                      null, 2007,  null,            98, 19.99);
insert into a_bkinfo.books values (2001, 'Programming SQL Server 2005',                     9822, 2006, '0596003216',    675, 49.99);
insert into a_bkinfo.books values (2002, 'SQL Server 2005 A Beginner''s Guide',             9030, 2006, '0072260939',    402, 39.99);
insert into a_bkinfo.books values (2003, 'SQL Server 2005 Developer''s Guide',              9030, 2006, '0072260998',    402, 49.99);
insert into a_bkinfo.books values (2004, 'SQL Server 2005 Stored Procedure Prg',            9030, 2006, '0072262888',    399, 59.99);
insert into a_bkinfo.books values (2005, 'Developer''s Guide to SQL Server 2005',           9325, 2006, '0321382188',    894, 59.99);
insert into a_bkinfo.books values (2006, 'T_SQL Programming (Inside series)',               9000, 2006, '9780756978',    390, 44.99);
insert into a_bkinfo.books values (2007, 'T_SQL Querying (Inside series)',                  9000, 2006, '9780733132',    391, 44.99);
insert into a_bkinfo.books values (2008, 'SQL Server 2005 T_Sql Recipies',                  9444, 2006, '159059570X',    503, 59.99);
insert into a_bkinfo.books values (2009, 'SQL Server 2005 Express Edition',                 9664, 2006, '0764589237',    150, 29.99);



insert into a_bkinfo.books values (1258, '.Net Development for Microsoft Office',           9000, 2005, '0735621322',    500, 49.99);
insert into a_bkinfo.books values (1689, 'Programming Visual Basic 2005: The Language',     9000, 2006, '9780735621831', 980, 59.99);
insert into a_bkinfo.books values (1678, 'Pro .NET 2.0 Windows Forms and Controls VB 2005', 9444, 2006, '1590959693',   1002, 49.99);
insert into a_bkinfo.books values (1278, 'Beginning VB 2008 Databases',                     9444, 2008, '9781590599471', 408, 44.99);
insert into a_bkinfo.books values (1478, 'Beginning OO Programming with VB 2005',           9444, 2006, '1590597695',    368, 44.99);
insert into a_bkinfo.books values (1894, 'Programming Visual Basic 2005',                   9822, 2005, '0596009496',    548, 39.99);
insert into a_bkinfo.books values (1279, 'Data-Driven Services with Silverlight 2',         9822, 2009, '9780596523091', 336, 44.99);
insert into a_bkinfo.books values (1776, 'Doing Objects in Visual Basic 2005',              9325, 2007, '9780321320490', 500, 49.99);
insert into a_bkinfo.books values (1948, 'Framework Design Guidelines',                     9325, 2006, '0321246756',    346, 44.99);
insert into a_bkinfo.books values (1077, 'Programming for Poets',                           9456, 2009, null,            401, 40.25);
insert into a_bkinfo.books values (1835, 'Data Binding with Windows Forms 2.0',             9325, 2006, '032126892X',    634, 49.99);
insert into a_bkinfo.books values (1541,  'Freethinkers: A History of American Secularism', 9023, 2004, '9780805077766', 448, 12.79);
insert into a_bkinfo.books values (1542,  'The Great Agnostic: Robert Ingersoll and American Freethought',  
                                                                                            9021, 2013, '9780300137255', 256, 16.99);
insert into a_bkinfo.books values (1543,  'Ties That Bind:The Story of an Afro-Cherokee Family in Slavery and Freedom',  
                                                                                            9024, 2006, '9780520250024', 327, 26.96);
insert into a_bkinfo.books values (1544,  'The House on Diamond Hill: A Cherokee Plantation Story',  
                                                                                            9024, 2012, '9780807872673', 336, 17.76);
insert into a_bkinfo.books values (1545,  'Team of Rivals: The Political Genius of Abraham Lincoln',  
                                                                                            9776, 2006, '9780739469767', 944, 13.96);
insert into a_bkinfo.books values (1546,  'The Johnstown Flood',                            9776, 1987, '9780671207144', 304, 10.39);


insert into a_bkinfo.books values (1677, 'Windows Forms 2.0 Programming',                   9325, 2006, '0321267966',    982, 74.99);
insert into a_bkinfo.books values (1670, 'Applied .NET Framework Programming VB.NET',       9000, 2003, '0735678772',    608, 49.99);
insert into a_bkinfo.books values (1401, 'Visual Studio Tools for Office',                  9325, 2006, '0321334884',    976, 54.99);
insert into a_bkinfo.books values (1537, 'The BedSide Book of Birds',                       9725, 2005, '0385514832',     68, 29.95);
insert into a_bkinfo.books values (1357, 'Why Birds Sing',                                  9725, 2005, '046507135X',    240, 26.00);
insert into a_bkinfo.books values (1609, 'In the Company of Crows and Ravens',              9725, 2005, '0300100760',    376, 18.95);
insert into a_bkinfo.books values (1979, 'Pro VB 2008 and the .NET 3.5 Platform',           9444, 2008, '9781590598221',1368, 59.99);
insert into a_bkinfo.books values (1457, 'Visual Basic 2008 Recipes',                       9444, 2008, '9781590599709', 300, 79.99);
insert into a_bkinfo.books values (1425, 'The Singing Life of Birds',                       9561, 2005, '0618405682',    468, 28.09);
insert into a_bkinfo.books values (1978, 'Acoustic Communication in Birds Vol1',            9561, 1983, '9780124268012', 360,103.91);


insert into a_bkinfo.books values (1621,  'The Unfeathered Bird',                           9020, 2013, '9780691151342', 304, 31.29);
insert into a_bkinfo.books values (1622,  'Bird Sense',                                     9020, 2012, '9780802779663', 265, 25.00);
insert into a_bkinfo.books values (1623,  'Lichens of North America',                       9021, 2001, '9780300082494', 828,135.00);
insert into a_bkinfo.books values (1624,  'Outstanding Mosses and Liverworts of Pennsylvania and Nearby States',             
                                                                                            9021, 2006, '9780976092575',9, 19.99);
insert into a_bkinfo.books values (1626,  'Bark: A Field Guide to Trees of the Northeast',  9021, 2011, '9781584658528', 280, 25.95);
insert into a_bkinfo.books values (1625,  'Winter Weed Finder: A Guide to Dry Plants in Winter (Nature Study Guides)',              
                                                                                            9021, 1989, '9780912550176',  64,  4.95);
insert into a_bkinfo.books values (1627,  'The Ants',                                       9022, 1990, '9780674040755', 732,120.18);
insert into a_bkinfo.books values (1628,  'The Superorganism:The Beauty, Elegance, Strangeness of Insect Societies',               
                                                                                            9902, 2008, '9780393067040', 544, 34.65);
insert into a_bkinfo.books values (1629,  'The Leafcutter Ants: Civilization by Instinct',  9022, 1990, '9780393338683', 160, 19.95);
insert into a_bkinfo.books values (1630,  'The Social Conquest of Earth',                   9022, 2012, '9780871404138', 352, 27.95);



insert into a_bkinfo.books values (1448, 'Backyard Birdsong Guide: Western North America',  9561, 2008, '9780811863971',3192, 29.99);
insert into a_bkinfo.books values (1877, 'High Performance MySQL',                          9822, 2008, '9780596101718', 708, 49.99);
insert into a_bkinfo.books values (1200, 'The Mismeasure of Man',                           9902, 1996, '9780393314250', 488, 17.95);
insert into a_bkinfo.books values (1245, 'A Scientific Approach to SQL Testing',            9902, 2010, '9780366214250', 488, 52.95);
insert into a_bkinfo.books values (1774, 'Ever Since Darwin',                               9902, 1992, '9780393308181', 288, 15.95);
insert into a_bkinfo.books values (1234, 'Hen''s Teeth and Horse''s Toes ',                 9902, 1994, '9780393311037', 416, 17.95);
insert into a_bkinfo.books values (1269, 'Querying XML',                                    9745, 2006, '9781558607118', 848, 63.95);
insert into a_bkinfo.books values (1525, 'Interface-Oriented Design',                       9725, 2006, '0976697050',    213, 29.99);
insert into a_bkinfo.books values (1619, 'The Oject-Oriented Thought Process',              9725, 2004, '9780672326110', 158, 29.99);
insert into a_bkinfo.books values (1483, 'Programming with XML',                            9745, 2008, null,            125, 19.99);
insert into a_bkinfo.books values (2017, 'Functional Programming',                          9528, 2010, '9781933988924', 528, 49.99);

insert into a_bkinfo.books values (2018,  'Oracle Database 11g SQL',                        9030, 2008, '9780071498500', 650, 49.99);
insert into a_bkinfo.books values (2025,  'Oracle SQL Fundamentals I Exam Guide',           9030, 2008, '9780071597869', 572, 59.99);
insert into a_bkinfo.books values (2027,  'Mastering Oracle SQL and SQL-Plus',              9444, 2005, '9781590594487', 464, 39.99);

insert into a_bkinfo.books values (2028,  'Mastering Oracle Databases',                     9444, 2010, '9781599594487', 464, 59.99);
insert into a_bkinfo.books values (2029,  'The Forgotten Bird Strikes Back ',               9030, 2010, '9091599594487',   5,  1.99);
insert into a_bkinfo.books values (2031,  'Comparative SQL',                                9444, 2013, '9781599591237', 750, 99.99);
insert into a_bkinfo.books values (2032,  'Oracle and the rest of the world',               9030, 2013, '9091599593217', 250, 55.99);
insert into a_bkinfo.books values (2622,  'Outstanding Bryophytes',                         9021, 2013, null,956, 89.99);
insert into a_bkinfo.books values (2623,  'Hornworts and Liverworts in your Garden ',       9021, 2013, null,501, 29.99);

我完全迷失了。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

为每个发布商无关系

获取三本最短的图书
SELECT publ_id, LEFT(title, 25) title, page_count,
(
  SELECT 1 + COUNT(*)
    FROM books
   WHERE page_count IS NOT NULL
     AND page_count > 0
     AND publ_id    IS NOT NULL
     AND publ_id = t.publ_id
     AND (page_count < t.page_count 
          OR
         (page_count = t.page_count 
          AND
          book_id < t.book_id))  
) rank 
  FROM books t
 WHERE page_count IS NOT NULL
   AND page_count > 0
   AND publ_id    IS NOT NULL
HAVING rank <= 3
 ORDER BY publ_id, rank;

为每个发布商提供三个最短的书籍

SELECT publ_id, LEFT(title, 25) title, page_count,
(
  SELECT 1 + COUNT(DISTINCT page_count)
    FROM books
   WHERE page_count IS NOT NULL
     AND page_count > 0
     AND publ_id    IS NOT NULL
     AND publ_id    = t.publ_id
     AND page_count < t.page_count
) rank 
  FROM books t
 WHERE page_count IS NOT NULL
   AND page_count > 0
   AND publ_id    IS NOT NULL
HAVING rank <= 3
 ORDER BY publ_id, rank;

这是 SQLFiddle 演示