gpt4 book ai didi

mysql - SELECT 列与 GROUP BY 列不同

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

拥有此数据库架构(仅用于说明目的)

[articles (id_article, title)] 
[articles_tags (id_tag, id_article)]
[tags (id_tag, name)]

使用 MySQL 可以做到:

SELECT a.title, COUNT(at.id_tag) tag_count FROM articles a
JOIN articles_tags at ON a.id_article = at.id_article
JOIN tags t ON t.id_tag = at.id_tag
GROUP BY a.id_article
ORDER BY tag_count DESC

得到的结果是每行都有文章的标题和文章的标签计数,例如

mysql for beginner | 8
ajax for dummies | 4

由于 ORACLE 不支持 SELECT 语句中的非聚合列,是否可以在一个查询中执行此操作?当您通过向 SELECT 语句添加聚合函数或向 GROUP BY 语句添加列来满足 ORACLE 的需求时,您已经得到了不同的结果。

提前致谢

最佳答案

是的,这是可能的。在 SELECT 列表中返回 id_article,而不是 title,并将整个查询括在括号中以使其成为内联 View ,然后从中进行选择,并联接到articles 表来获取关联的 title

例如:

SELECT b.title
, c.tag_count
FROM ( SELECT a.id_article
, COUNT(at.id_tag) tag_count
FROM articles a
JOIN articles_tags at ON a.id_article = at.id_article
JOIN tags t ON t.id_tag = at.id_tag
GROUP BY a.id_article
) c
JOIN articles b
ON b.id_article = c.id_article
ORDER BY c.tag_count DESC
<小时/>

您还可以评估是否确实需要在内联 View 中包含 articles 表。我们可以改为执行GROUP BY at.id_article

我认为这会返回等效的结果:

SELECT b.title
, c.tag_count
FROM ( SELECT at.id_article
, COUNT(at.id_tag) tag_count
FROM articles_tags at
JOIN tags t ON t.id_tag = at.id_tag
GROUP BY at.id_article
) c
JOIN articles b
ON b.id_article = c.id_article
ORDER BY c.tag_count DESC

关于mysql - SELECT 列与 GROUP BY 列不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30597512/

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