Mysql 为什么我没有得到我期望的价值?

Mysql 为什么我没有得到我期望的价值?,mysql,sql,Mysql,Sql,查询: SELECT n.Type AS TYPE, n.UserIdn AS UserIdn, u.Username AS Username, n.NewsIdn AS NewsIdn, n.Header AS Header, n.Text AS TEXT, n.Tags AS Tags, n.ImageLink AS ImageLink, n.Vi

查询:

SELECT 
        n.Type AS TYPE,
        n.UserIdn AS UserIdn,
        u.Username AS Username,
        n.NewsIdn AS NewsIdn,
        n.Header AS Header,
        n.Text AS TEXT,
        n.Tags AS Tags,
        n.ImageLink AS ImageLink,
        n.VideoLink AS VideoLink,
        n.DateCreate AS DateCreate,
        IFNULL(SUM(l.Type = 'up'),0) AS Uplikes, 
        IFNULL(SUM(l.Type = 'down'),0) AS Downlikes,
        (IFNULL(SUM(l.Type = 'up'),0) - IFNULL(SUM(l.Type = 'down'),0)) AS SumLikes,
        SUM(f.Type = 'up') AS CountFavorites
    FROM News n 
    INNER JOIN Users u ON n.UserIdn = u.UserIdn 
    LEFT JOIN Likes l ON n.NewsIdn = l.NewsIdn
    LEFT JOIN Favorites f ON n.NewsIdn = f.NewsIdn

    GROUP BY n.id 
我认为我的问题在于value
CountFavorites
——对于NewsIdn,我得到的value=2,我期望得到1

图像结果():

有谁能帮我弄清楚为什么我的结果不如预期

SELECT 
            n.Type AS TYPE,
            n.UserIdn AS UserIdn,
            u.Username AS Username,
            n.NewsIdn AS NewsIdn,
            n.Header AS Header,
            n.Text AS TEXT,
            n.Tags AS Tags,
            n.ImageLink AS ImageLink,
            n.VideoLink AS VideoLink,
            n.DateCreate AS DateCreate,
            IFNULL(SUM(l.Type = 'up'),0) AS Uplikes, 
            IFNULL(SUM(l.Type = 'down'),0) AS Downlikes,
            (IFNULL(SUM(l.Type = 'up'),0) - IFNULL(SUM(l.Type = 'down'),0)) AS SumLikes,
            (select count(*) from favorites f where f.Type = 'up' and n.NewsIdn = f.NewsIdn) AS CountFavorites
        FROM News n 
        INNER JOIN Users u ON n.UserIdn = u.UserIdn 
        LEFT JOIN Likes l ON n.NewsIdn = l.NewsIdn
        -- LEFT JOIN Favorites f ON n.NewsIdn = f.NewsIdn

        GROUP BY       n.Type, n.UserIdn,u.Username,n.NewsIdn,Header,n.Text,n.Tags ,n.ImageLink, n.VideoLink , n.DateCreate
您的错误是加入一对多对多,复制行。如果在多对多联接之后使用聚合,则会遇到麻烦。在这种情况下,在联接之前聚合

或者你也可以把它写成

            select n.Type AS TYPE,
            n.UserIdn AS UserIdn,
            u.Username AS Username,
            n.NewsIdn AS NewsIdn,
            n.Header AS Header,
            n.Text AS TEXT,
            n.Tags AS Tags,
            n.ImageLink AS ImageLink,
            n.VideoLink AS VideoLink,
            n.DateCreate AS DateCreate,
              Uplikes, 
             Downlikes,
            SumLikes,
 CountFavorites
inner join users on ...
left join (
select l.news_idn, 
IFNULL(SUM(l.Type = 'down'),0) AS Downlikes,
(IFNULL(SUM(l.Type = 'up'),0) - IFNULL(SUM(l.Type = 'down'),0)) AS SumLikes
from likes) l
on n.NewsIdn = l.NewsIdn

left join (select newsidn ,count(*) CountFavorites from favorites f where f.Type = 'up') f on i.newsidn=n.newsidn

您使用的
分组方式不正确。请启用
ONLY\u FULL\u GROUP BY
@freshprinceofs告诉我问题可以有答案,而不使用
ONLY\u FULL\u GROUP BY
?请不要鼓励使用
GROUP BY
。这是非ANSI标准,将来会给OP带来问题。只是复制粘贴。请为编辑的操作提供链接