【发布时间】:2018-03-22 17:41:51
【问题描述】:
在这个例子中,我有一个图书数据库,每本书有一条记录。记录包含书的所有者、类型和其他一些信息。我需要返回每个所有者、每个流派的前 20 名样本。
我计划这样做的方式是以编程方式构建一个巨大的查询,例如:
(SELECT Owner, Genre, Data_one, Data_two FROM `dataset-table` WHERE Genre LIKE "%HORROR%" AND Owner LIKE "Alex" LIMIT 20)
UNION ALL
(SELECT Owner, Genre, Data_one, Data_two FROM `dataset-table` WHERE Genre LIKE
"%COMEDY%" AND Owner LIKE "Alex" LIMIT 20)
UNION ALL
(SELECT Owner, Genre, Data_one, Data_two FROM `dataset-table` WHERE Genre LIKE
"%HORROR%" AND Name LIKE "Sarah" LIMIT 20)
UNION ALL
(SELECT Owner, Genre, Data_one, Data_two FROM `dataset-table` WHERE Genre LIKE
"%COMEDY%" AND Owner LIKE "Sarah" LIMIT 20)
UNION ALL
(SELECT Owner, Genre, Data_one, Data_two FROM `dataset-table` WHERE Genre LIKE
"%HORROR%" AND Owner LIKE "James" LIMIT 20)
UNION ALL
(SELECT Owner, Genre, Data_one, Data_two FROM `dataset-table` WHERE Genre LIKE "%COMEDY%" AND Owner LIKE "James" LIMIT 20)
但是,我需要同时为几百个用户和 6 个流派执行此操作,我在 BigQuery 中收到一个错误,提示查询太复杂。
有没有人知道如何根据多个类别退回大量有限样本?如果它们最终出现在一个大数据集中,那很好。
例如:
Owner | Genre | Data_one | Data_two
Alex | Horror | Stephen King | IT
.... 100 more Horror books from Alex ....
Sarah | Horror | Darren Shan | Lord Loss
.... 100 more Horror books from Sarah ....
Alex | Comedy | Russel Brand | MBW
.... 100 more Comedy books from Alex ....
我会退回 Alex 的 20 部恐怖书、Sarah 的 20 部恐怖书和 Alex 的 20 部喜剧中的任何样本。
【问题讨论】:
-
请向我们提供所有者、名称、流派、data_one 和 data_two 的示例数据以及您的预期结果。
-
完成了,我实际上在原版中混淆了 Name 和 Owner,它们是同一个字段。
-
查看答案 - 它就是这样做的!
标签: mysql sql google-bigquery