gpt4 book ai didi

sql - 在单个 SQL 语句中使用多个 COUNT 和 SUM

转载 作者:可可西里 更新时间:2023-11-01 08:01:49 24 4
gpt4 key购买 nike

我有一个名为pagespage_viewspage_itemspage_votes 的表。后三个表包含一个 page_id 外键,以便记录属于页面的每个单独的 View 、项目和投票。

当我查询一个页面时,我还想检索 COUNT page_viewsCOUNT page_itemsSUM page_votes.vote

我在下面粘贴了一个查询。它检索总 View 数。我进行了各种尝试来为其添加项目和投票,但结果要么是语法错误,要么是 View /项目/投票作为相同且“错误”的数字返回,这可能是由于我加入的方式。

如何向该查询添加项目和投票?

SELECT
Page.*,
COUNT(*) AS views
FROM pages AS Page
INNER JOIN page_views AS PageView
ON Page.id = PageView.page_id
GROUP BY Page.id
ORDER BY views DESC
LIMIT 10 OFFSET 0

最佳答案

这将选择 TOP 10 viewed 页面,并且只会计算这些页面的项目和投票数。

如果您有很多页面但只需要其中的 10,则效率很高,消除了不必要的计数。

SELECT  (
SELECT COUNT(*)
FROM page_views
WHERE page_views.page_id = pages.id
) AS views_count,
(
SELECT COUNT(*)
FROM page_items
WHERE page_items.page_id = pages.id
) AS items_count,
COALESCE(
(
SELECT SUM(vote)
FROM page_votes
WHERE page_votes.page_id = pages.id
), 0) AS votes_sum
FROM pages
ORDER BY
views_count DESC
LIMIT 10

更高效的查询:

SELECT  pages.*,
(
SELECT COUNT(*)
FROM page_items
WHERE page_items.page_id = pages.id
) AS items_count,
COALESCE(
(
SELECT SUM(vote)
FROM page_votes
WHERE page_votes.page_id = pages.id
), 0) AS votes_sum
FROM (
SELECT page_id, COUNT(*) AS cnt
FROM page_views
GROUP BY
page_id
ORDER BY cnt DESC
LIMIT 10
) AS pvd,
pages
WHERE pages.id = pvd.page_id

,消除与页面不必要的连接。

关于sql - 在单个 SQL 语句中使用多个 COUNT 和 SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/620471/

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