什么是文件制作者小计的sql等价物?

时间:2014-07-30 17:06:12

标签: mysql sql filemaker

我非常喜欢可以运行的文件制作者小计报告,它将项目组合在一起并提供一个标题'允许您计算记录,或获取当前组信息的各种类型。他们在sql中的等价物会给我相同的结果吗?

例如,如果我有几个带书名/作者的数据库,我想拉一个列表,然后按作者分组,并使用相同的标题并计算我记录的作者数量写道:

Orson Scott Card (2)
Ender's Game
Ender's Shadow

Frank Herbert (2)
Dune
Dune Messiah

Patrick Rothfus (1)
The Name of the Wind

我能做些什么去那里?如果有一个sql解决方案,我最感兴趣的是,在我得到一个记录列表之后,不是解析解决方案。

2 个答案:

答案 0 :(得分:1)

您可以使用以下查询来获得类似的输出。

SELECT author,count(*) as count,GROUP_CONCAT(title) as titles
  FROM (
    SELECT 'Orson Scott Card' AS author,'Ender\'s Game' as title UNION ALL
    SELECT 'Orson Scott Card','Ender\'s Shadow' UNION ALL
    SELECT 'Frank Herbert','Dune' UNION ALL
    SELECT 'Frank Herbert','Dune Messiah' UNION ALL
    SELECT 'Patrick Rothfus','The Name of the Wind') book
  GROUP BY author;

输出:

AUTHOR              COUNT       TITLES

Frank Herbert       2           Dune,Dune Messiah
Orson Scott Card    2           Ender's Shadow,Ender's Game
Patrick Rothfus     1           The Name of the Wind

但请记住,SQL是为了获取表而不是文档。如果作者书籍的标题变得太大,这个例子可能会遇到问题。

答案 1 :(得分:0)

使用@oldprogrammer GROUP BY和@marcb WITH ROLLUP的一些解决方案对我有用,并且还有ORDER BY添加它以显示' subsummary'在作者的作品之上。我使用OFFSET为1来省略第一个结果,它具有返回结果的总数。

SELECT * FROM
    (
    SELECT author,title, COUNT(title) AS count
    FROM books GROUP BY author,title WITH ROLLUP
    ) t 
ORDER BY author, title

结果:

Author              Count    Title
Orson Scott Card    2        NULL
Orson Scott Card    1        Ender's Game
Orson Scott Card    1        Ender's Game
Frank Herbert       2        NULL
Frank Herbert       1        Dune
Frank Herbert       1        Dune Messiah
Patrick Rothfuss    1        NULL
Patrick Rothfuss    1        The Name of the Wind