【问题标题】:how to get sum of column value with inner join in one query?如何在一个查询中使用内部联接获取列值的总和?
【发布时间】:2013-01-27 09:43:07
【问题描述】:

我有一个表名为 a_ad_display,因为我有下表

advId | Displaytime

我有一个带有以下列的 a_advertise 表

advertiseId| advertisename| mediaTypeId

我有一个带有以下列的 a_mediatype 表

mediaTypeId | medianame

1 | Image
2 | Animation
3 | video

a_display 表中有多个 advId 条目

我想用他们的 mediaType 获取广告显示的总和,例如 a_display 表中有多少视频、图像和动画类型的广告

我是这样做的

SELECT 
  mdtype.medianame AS _type,
  SUM(mdtype.medianame = 'Image') AS _display 
FROM
  a_ad_display a 
  INNER JOIN a_advertise adv 
    ON adv.advertiseId = a.advId 
  INNER JOIN a_mediatype mdtype 
    ON mdtype.mediaId = adv.mediaTypeId 
GROUP BY medianame ;

但我得到了以下结果

但是如果只写 sum(distinct mdtype.medianame) 那么它会给我错误...那么我怎样才能在一个查询中获取图像视频和动画的所有值?

【问题讨论】:

    标签: mysql sql database inner-join


    【解决方案1】:
    SELECT
        m.medianame,
        COUNT(as.advId) as Total
    FROM    a_mediatype as m
    INNER JOIN a_advertise as a ON a.mediaTypeId = m.mediaTypeId
    INNER JOIN  a_ad_display as ad ON ad.advId = a.advertiseId
    GROUP BY m.mediaTypeId
    

    【讨论】:

    • 完美...如我所愿...thanx
    【解决方案2】:

    试试这个...

    SELECT mdtype.medianame as _type, SUM(mdtype.medianame) as _display
    FROM a_ad_display a
    INNER JOIN a_advertise adv ON ad.advertiseID=a.advId
    INNER JOIN a_mediatype mdtype ON mdtype.mediaID=adv.mediaTypeId
    GROUP BY _type
    HAVING DISTINCT(_type)
    

    【讨论】:

    • 对不起...您的查询有错误“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在 'DISTINCT(_type) GROUP BY 附近使用的正确语法_type' 在第 5 行"
    • 我以为你要的是总和。哈哈!抱歉 :) 我已经更改了我评论的顺序。
    【解决方案3】:

    你可以试试这个

    SELECT m.mediaTypeId, 
           MIN(m.medianame) AS `type`, 
           COUNT(m.mediaTypeId) AS `count`
      FROM a_ad_display a LEFT JOIN 
           a_advertise d on d.advertiseId=a.advId LEFT JOIN 
           a_mediatype m on m.mediaId=d.mediaTypeId 
    GROUP BY m.mediaTypeId
    

    【讨论】:

    • thanx for answer...您的回答中只有一件事需要更改为 GroupBy Only m.mediaTypeId ....否则你们俩都是对的 u 和 @raheel shan..thanx跨度>
    • 抱歉,误读了。我认为你需要它在每个广告的基础上。改了答案。你当然不客气。编码愉快。
    【解决方案4】:

    试试这个:

    SELECT
        m.medianame,
        COUNT(as.advId) as Total
    FROM a_mediatype as m
    INNER JOIN a_advertise as a 
    ON a.mediaTypeId = m.mediaTypeId
    INNER JOIN  a_ad_display as ad 
    ON ad.advId = a.advertiseId
    GROUP BY m.mediaTypeId
    

    【讨论】:

      猜你喜欢
      • 2020-08-02
      • 2015-01-03
      • 2016-10-27
      • 2020-03-07
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 2017-07-14
      相关资源
      最近更新 更多