MYSQL-COUNT个不同

时间:2018-12-26 20:55:28

标签: mysql sql

我有两个数据表,您可以在其中找到它们。

我想获得:

  • 代码
  • 主题名称
  • 不可评估的活动数量

但是只有具有4个或更多不可评估活动的受试者 ...

这是我到目前为止拥有的代码,但是我得到的“名称”不是我想要的...

这就是我所希望的(附加的)

我尝试了其他方法,但得到的名字正确,但不是我想要的名字。

有帮助吗?谢谢!

表1

Table 1

表2

Table 2

我的代码

My code

我想要的结果

Result I want

其他错误代码

Other wrong code

2 个答案:

答案 0 :(得分:0)

第一个查询中缺少的是联接条件。您的代码只说... FROM table1 JOIN table2 GROUP BY...,而没有联接条件的联接将创建笛卡尔联接(来自table1的所有记录将与来自table2的所有记录配对)。只需从查询中删除分组依据和计数,即可了解我的意思。

只需添加连接条件(subject_id似乎是两个表之间的公共字段):

... FROM table1 JOIN table2 on table1.subject_id=table2.subject_id GROUP BY...

请使用各自的表名替换table1和table2。

答案 1 :(得分:0)

从第二个查询开始:将聚合查询与«HAVING BY»子句一起使用是一个好主意,但是,联接表的方式并不可行,因为它会产生笛卡尔积。

尝试:

SELECT
    s.subject_id,
    s.name,
    COUNT(distinct n.act_id)
FROM 
    subject as s
    INNER JOIN nonevaluableactivity as n
        ON n.subject_id = s.subject_id
GROUP BY
    s.subject_id,
    s.name
HAVING
    COUNT(distinct n.act_id) >= 4