簡體   English   中英

SQL 查詢未在 SUM 和 COUNT 中找到所有行

[英]SQL Query not finding all rows in SUM and COUNT

select coalesce(ratings.positive,0) as positive,coalesce(ratings.negative,0) as negative,articles.id,x.username,commentnumb, 
    articles.category,
    articles."createdAt",
    articles.id,
    articles.title,
    articles."updatedAt"
    FROM articles
    LEFT JOIN (SELECT id AS userId,username,about FROM users) x ON articles.user_id = x.userId
    LEFT JOIN (SELECT id,
        article_id,
        sum(case when rating = '1' then 1 else 0 end) as positive,
        sum(case when rating = '0' then 1 else 0 end) as negative
        from article_ratings
        GROUP by id
        ) as ratings ON ratings.article_id = articles.id
    LEFT JOIN (SELECT article_id,id,
       count(article_id) as commentNumb
       from article_comments
       GROUP by id
       ) as comments ON comments.article_id = articles.id
    WHERE articles."createdAt" <= :date
    group by ratings.positive,ratings.negative,articles.id,x.username,commentnumb
    order by articles."createdAt" desc
    LIMIT 10

代碼正在運行,但是我的評論和評分比 SUM 和 COUNT 函數中計算的要多得多。

如何修復此查詢?

這是使用 postgres。

我做了一些實驗,似乎第三個評論加入是引起問題的一個。

在派生表中,理想情況下您應該使用 article_id 進行分組。 但是,您是根據 id 分組的。 因此,您在派生表中獲得的行數超過了必要的行數。 我已修改查詢以滿足您的需要。

    SELECT COALESCE(ratings.positive,0) AS positive,COALESCE(ratings.negative,0) AS negative,articles.id,x.username,commentnumb, 
        articles.category,
        articles."createdAt",
        articles.id,
        articles.title,
        articles."updatedAt"
        FROM articles
        LEFT OUTER JOIN (SELECT id AS userId,username,about FROM users) x ON articles.user_id = x.userId
        LEFT OUTER JOIN (SELECT article_id,
            SUM(case when rating = '1' then 1 else 0 end) as positive,
            SUM(case when rating = '0' then 1 else 0 end) as negative
            FROM article_ratings
            GROUP by article_id 
            ) AS ratings ON ratings.article_id = articles.id
        LEFT OUTER JOIN (SELECT article_id,
           count(article_id) as commentNumb
           FROM article_comments
           GROUP by article_id
           ) AS comments ON comments.article_id = articles.id
        WHERE articles."createdAt" <= :date
        ORDER BY articles."createdAt" desc
        LIMIT 10;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM