【问题标题】:inner join + count + group by内连接 + 计数 + 分组依据
【发布时间】:2012-09-18 10:42:48
【问题描述】:

我无法对内部联接的结果进行计数/分组

我有两张桌子

  1. results_dump:有两列:emailresult(结果值可以是openbounce

  2. all_data:包含三列:emailfull_nameaddress

第一个目标是查询 result_dump 表,并对特定的email 结果为"open" 的次数进行计数和分组。

这个查询很好用:

SELECT `email`, COUNT(*) AS count
FROM `result_dump`
WHERE `date` = "open" 
GROUP BY `email`
HAVING COUNT(*) > 3
ORDER BY count DESC

第二个目标是获取这些结果(任何“打开”超过 3 次的人)并输入“全名”和“地址”,这样我就可以获得有关谁打开电子邮件 3 次以上的详细信息。

我有这个查询,它可以将数据放在一起 - 但我不知道如何让 COUNTHAVINGORDERINNER JOIN 一起使用?

SELECT *
FROM all_data
INNER JOIN result_dump ON 
all_data.email = result_dump.email
where `result` = "open" 

【问题讨论】:

  • 好吧,您需要正确引用可分组对象。你这样做吗?例如:select a.email, count() as count from A a inner join B b on a.id=b.id where a.result = 'open' group by a.email 有 count( ) >= 3,按 count(*) desc 排序
  • 我花了几个小时才明白(我是新手)——它奏效了。谢谢。

标签: mysql count group-by inner-join


【解决方案1】:

这很好用...!试试这个..

SELECT title.title
       ,count(*)
       ,title.production_year
       ,title.id as movie_id
       ,title.flag as language
       ,movie_info.info
FROM title INNER JOIN movie_info ON title.id=movie_info.movie_id;

【讨论】:

    【解决方案2】:

    尝试以下查询:

    SELECT * FROM all_data AS a
    INNER JOIN 
    (SELECT * FROM result_dump where email IN 
                                        (SELECT `email`
                                         FROM `result_dump`
                                         WHERE `date` = "open" 
                                         GROUP BY `email`
                                         HAVING count(email) >3
                                         ORDER BY count(email) DESC)) AS b
    ON a.email = b.email
    WHERE b.`result` = "open" 
    

    【讨论】:

    • 我厌倦了这个它给了我“每个派生表必须有自己的别名”错误 - 在你的第一行应该“SELECT * FROM all_data a”是 SELECT * FROM all_data as ____”我不是确定应该有什么
    • 还没有工作,但我需要一天的时间才能真正完成它,很有可能我在某个地方犯了错误 - 谢谢
    • SELECT , count() as count from result_dump AS a inner join all_data AS b on a.email = b.email where a.result_dump = 'open ' 按电子邮件分组
    【解决方案3】:
    SELECT email,name,count(*)
    FROM all_data
    INNER JOIN result_dump ON 
    all_data.email = result_dump.email
    where `result` = "open" 
    group by result_dump.email
    having count(*)>3
    ORDER by count DESC
    

    我觉得这个没什么问题。

    【讨论】:

      猜你喜欢
      • 2010-10-16
      • 2012-09-01
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多