【发布时间】:2014-12-07 20:17:00
【问题描述】:
我需要关于一个有点混乱的 sql 查询的帮助。我有 3 张桌子。名称:article、category 和 category_article 表。
在我的文章表中,有 4 列分别是:
- aid -> 文章 ID
- py -> 文章年份
- totalPoint -> 文章点数
- tc -> 文章被引用次数
在类别表中,有 2 列分别是:
- cid -> 类别 ID
- 类别 -> 类别名称
最后,在我的 category_article 表中,有 2 列分别是:
- cid -> 类别 ID
- aid -> 与类别相关的文章 ID
在下面,有示例表输入。
文章列表
______________________________
| aid | py | totalPoint | tc |
-------------------------------
| 1 | 2014| 30 | 3 |
-------------------------------
| 2 | 2013| 20 | 2 |
-------------------------------
| 3 | 2014| 50 | 10 |
_______________________________
分类表
__________________
| cid | category |
-------------------
| 1 | Surgery |
-------------------
| 2 | Enginering|
____________________
Category_Article 表
__________________
| cid | aid |
-------------------
| 1 | 3 |
-------------------
| 2 | 5 |
____________________
我的目的是只用一个 sql 查询找到这个输出。
类别名称、年份、totalArticleNumber、totalPoint(desc)、文章 id(当年和该类别中被引用次数最多的文章)、被引用时间(前 20 名)
示例输出为:
_______________________________________________________________________________________
Category name | year | totalArticleNumber | totalPoint | id of article(best) | citedTime |
________________________________________________________________________________________
Surgery | 2013 | 182 | 5234 | 312 | 22 |
_________________________________________________________________________________________
Engineering | 2014 | 189 | 5000 | 10 | 32 |
我可以用 java 编程语言来做这个表。就像首先做一些查询,然后做第二个查询。
但我需要在一个查询中完成。
我尝试使用JOIN、HAVING、GROUP BY、DISTINCT 和其他一些 sql 内容,但我无法成功。
感谢任何帮助。
编辑
例如,如果有两篇文章具有相同的时间被引值,则将它们一起显示。 与前两列一样,文章 419 和 385 的引用值相同,因此它们都在表中。 我有两个选择。
第一种方式 -> 只显示一篇文章并限制 20 个。所以通过这种方式我可以看到 20 个不同的类别-年份组合。 第二种方式-> 显示相同价值的被引用文章,但我必须看到 20 个不同的类别-年份组合。
【问题讨论】:
-
citedTime代表什么?您如何确定最佳文章? -
@McAdam331citedTime 是文章的被引次数。引用时间的值决定了文章是否最好。
-
听起来不错,我现在正在输入内容。
标签: mysql sql join group-by distinct