【问题标题】:How to Count id which id have have values other column如何计算 id 哪个 id 具有其他列的值
【发布时间】:2014-10-16 09:08:00
【问题描述】:

我有一张这样的桌子:

ID     Diagnosis   
---------------
1       d1
1       d2
1       d3         
2       d1
2       d3
2       d4
3       d1
3       d2 

我想计算同时具有d1d2的唯一IDs。

这样的期望输出

total    
------
2

如何编写 SQL 代码来实现这一点?

【问题讨论】:

  • MySQL 或 MSSQL。没关系。
  • 不清楚计数是怎么来的??你能解释一下吗??
  • 具有 d1 和 d2 的 id 计数

标签: mysql sql sql-server


【解决方案1】:

您可以使用几个in 条件:

SELECT COUNT(DISTINCT id)
FROM   my_table
WHERE  id IN (SELECT id FROM my_table WHERE diagnosis = 'id1') AND
       id IN (SELECT id FROM my_table WHERE diagnosis = 'id2') 

【讨论】:

    【解决方案2】:

    这是 MySQL 的解决方案...

    SELECT x.id 
      FROM my_table x 
     WHERE diagnosis IN ('d1','d2') 
     GROUP 
        BY id 
    HAVING COUNT(*) =2;
    +----+
    | id |
    +----+
    |  1 |
    |  3 |
    +----+
    2 rows in set (0.00 sec) <-- ANSWER!!!
    

    【讨论】:

    • +1 - 不错的解决方案。这隐含地假设[id, diagnosis] 的组合是唯一的(否则,[1, d1] 的两行也会返回该行,尽管它不是故意的。我猜这是一个合理的假设,尽管 OP 没有明确说明.
    • @Mureinik 是的,事实上我假设在(id,诊断)上进行了 PK。如果不是这种情况,那么 COUNT(DISTINCT) 会达到同样的效果。
    【解决方案3】:

    这可能会有所帮助..我已经更新了..

    select count(*) as TOTAL from TABLE_NAME where Diagnosis in ('d1', 'd2') group by Diagnosis
    

    【讨论】:

    • 这是不正确的 - 它也将计算只有 d1 或只有 d2ids
    • 这帮不了我。因为在表达式中表示 d1 或 d2。但我想要 d1 和 d2
    • @tcett:所以你想要计数 d1 和 d2 单独?
    • 不,d1和d2必须存在。不能分开
    【解决方案4】:

    您的问题写得很含糊,但我认为您希望在 MSSQL 中使用以下解决方案:

    select COUNT(1) from 
    (
        select distinct(id) from my_table where Diagnosis = 'd1'
        intersect
        select distinct(id) from my_table where Diagnosis = 'd2'
    ) as TempResultset
    

    如果您单独运行内部查询,您将获得 Id。

    【讨论】:

    • 抱歉,我从我的 sql 服务器创建了这个脚本,由于某种原因无法显示给你,我不知道 SQLFiddle。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多