gpt4 book ai didi

php - 组合这三个 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 07:53:15 25 4
gpt4 key购买 nike

我开发了这三个查询,如下所示,可查找每篇文章的最多浏览量、最多评论和最多点赞数(文章由内容 ID 和格式定义)。我理解 Target ID != ContentID 和 Format != TargetClass,但我将它们视为同一事物。

我需要使用这三个查询来输出拥有最多评论、点赞和浏览量的前 3 篇文章(按该顺序的优先级)。我在 SQL 方面并不是特别有天赋,所以有人可以提供一个解决方案和一个温和的解释吗?如果问题需要重新表述,请说清楚,我会这样做。干杯。

最多观看次数(按降序排列;最多观看次数位于顶部)

SELECT ContentID, Format
FROM Content
GROUP BY ContentID, Format
ORDER BY COUNT(View) DESC

最多评论(按降序排列;最多评论位于顶部)

SELECT TargetID, TargetClass
FROM Comments
GROUP BY TargetID, TargetClass
ORDER BY COUNT(TargetID) DESC

最喜欢(按降序排列;最多喜欢位于顶部)

SELECT ContentID, Format
FROM Likes
GROUP BY ContentID, Format
ORDER BY COUNT(ContentID) DESC

示例数据和输出(根据要求)表 1:

ContentID| Format  |View|
---------|---------|----|
1 |Paperback|1700|
---------|---------|----|
1 | Ebook |1500|
---------|---------|----|
2 |Paperback|1500|
-------------------------

表 2:

CommentID|TargetID |TargetClass|
---------|---------|-----------|
1 | 1 | Ebook |
---------|---------|-----------|
2 | 2 | Paperback |
---------|---------|-----------|
3 | 1 | Ebook |
--------------------------------

表 3:

  LikeID | ContentID| Format  |
---------|---------|---------|
1 | 1 |Ebook |
---------|---------|---------|
2 | 2 |Paperback|
---------|---------|---------|
3 | 2 |Paperback|
------------------------------

所需的解决方案:

在表 1 中,contentId = 1 且 format = 平装本的浏览次数最多,但是,在决定文章的受欢迎程度时,浏览次数的权重小于点赞数。在表 3 中,ContentId=2 且 format=paperback 比其他两篇文章中的任何一篇都有更多的喜欢(表中缺少的文章根本没有喜欢)。然而,评论的权重最高,在表 2 中,targetid=1、format=ebook 的评论比其他两篇文章中的任何一篇都多。

这意味着 targetid=1 和 format=ebook 是最受欢迎的书籍。然而,当两个人的评论数量相同时,他们就会依靠点赞来确定最受欢迎的文章。然而,如果他们再次拥有相同的点赞数,那么就会依靠浏览量来确定最受欢迎的文章。

所需的输出是如下列表:

ContentID | Format
1 | ebook
2 | paperback
1 | paperback

按照“受欢迎程度”排序。

最佳答案

我认为这是正确的解决方案:

SELECT V1.ContentID, V1.Format
FROM
((SELECT ContentID, Format ,Sum(View) AS CountView
FROM Content
GROUP BY ContentID, Format) V1) LEFT OUTER JOIN

(
SELECT V2.ContentID, V2.Format ,CountComments,CountLikes
FROM
((SELECT TargetID AS ContentID, TargetClass AS Format,Count(TargetID) AS CountComments
FROM Comments
GROUP BY TargetID, TargetClass) V2) LEFT OUTER JOIN

((SELECT ContentID, Format ,Count(ContentID) AS CountLikes
FROM Likes
GROUP BY ContentID, Format) V3)

ON(V3.ContentID=V2.ContentID AND V3.Format =V2.Format)
) V12
ON(V1.ContentID=V12.ContentID AND V1.Format =V12.Format)
ORDER BY CountComments DESC,CountLikes DESC ,CountView DESC
LIMIT 3;

关于php - 组合这三个 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25846746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com