2017-10-09 36 views
0

我正在做一个概念验证。我有一个“ArticleRead”V类,它有一个不独特的属性“JournalTitle”(每篇日记中有大量的读取内容),一个“Product”V类有一个不是“Subject”的唯一属性, “类型”。根据来自不同班级的价值选择V班的前50名

ArticleRead为我们系统的用户阅读的每篇文章插入一个顶点。

任何人都可以给出一个近似的SQL来查找特定主题的前50名阅读期刊标题吗?在我们目前的关系数据库系统中,我们必须找到有关该主题的产品,然后通过这些产品的journalTitle统计所有articleReads,然后获得前50名。这需要几个生命周期。

另外,任何关于修改边缘或任何其他建议的建议都是值得欢迎的(这是我们在进行非常少的自我训练之后玩的概念证明)。

回答

0

你可以尝试以下方法:

SELECT FROM ( 
    SELECT JournalTitle, count(*) as count FROM (
    SELECT expand(out()) FROM Product WHERE Subject = ? 
    ) GROUP BY JournalTitle 
) ORDER BY count LIMIT 50 

SELECT FROM (
    SELECT JournalTitle, count(*) as count 
    FROM ArticleRead 
    WHERE in()[0].Subject = ? 
) ORDER BY count LIMIT 50 

只是为了记录在案,像这样的操作(单级遍历和聚合)的图形数据库的优势对比到关系数据库通常不是很大

+0

谢谢。 “真实”的数据将有一个产品的主题,更多的类与文章阅读的边缘,TB和TB的文章读。这篇文章的绝对大小让我们每年都会在Oracle中抛弃旧的数据。我希望文档/图形数据库被证明是一个更好的解决方案。我在这方面遇到了一些麻烦,但我认为我的边缘倒退了(在我的边缘会出现productID),我想我试图重命名“in”和“out”来破坏它。 –

+0

稍作调整 - GROUP BY JournalTitle ORDER BY COUNT LIMIT 50 –