0

在 mysql - 像这样的表中:

ID 名称 值

1 颜色 蓝色
1 重量 50
1种水果
2 颜色 红色
2 体重 40
3 颜色 黄色  

我想获得具有“类型”名称/特征的不同 ID 的计数和不具有不同 ID 的计数。第一个(那些做的)很容易,因为它已定义,但如果我执行 select count(distinct ID) where name <> 'type' - ID 1 仍将是该计数的一部分,因为它具有其他行/属性<> '类型'。

在此示例中 - distinct count = 'type' 的所需结果将是 1(ID 1),并且 distinct count <> 'type' 将是 2(ID 的 2 和 3)。

提前致谢。

4

4 回答 4

0

这类似于SQL 查询用户在表中有一条记录但没有另一条记录

您可以选择 id 不在子查询中的位置,以查找具有类型的 id

select count(id) from table where id not in (select id from table where name = 'type')
group by id
于 2013-10-21T23:40:25.537 回答
0

对于此特定任务,您可以使用:

select count(distinct ID) from table
where ID in (select ID from table where name='type') --- this will give you count of IDs where type exists

select count(distinct ID) from table
where ID not in (select ID from table where name='type') -- this will give you count of IDs without type
于 2013-10-21T23:41:52.920 回答
0
SELECT id FROM test GROUP BY id HAVING 
CONCAT(",",CONCAT(GROUP_CONCAT(name), ","))
NOT LIKE '%,Type,%'

会给你所有的ID没有Typehttp ://sqlfiddle.com/#!2/30837/1

(Concat,确保您不是XType偶然匹配的。)

尽管

SELECT COUNT(id) AS count, GROUP_CONCAT(id) AS ids 
FROM(SELECT id, count(name) as count FROM test 
GROUP BY id HAVING CONCAT(",",CONCAT(GROUP_CONCAT(name), ","))
NOT LIKE '%,Type,%') as temp;

会给你想要的计数:http ://sqlfiddle.com/#!2/30837/9

于 2013-10-21T23:38:25.257 回答
-1
SELECT CASE
          WHEN Name='Type' THEN 'Type'
          ELSE 'Non-Type'
       END Name
      ,ID
      ,COUNT(ID)
FROM Stuff
GROUP BY
     CASE
          WHEN Name='Type' THEN 'Type'
          ELSE 'Non-Type'
     END 
    ,ID

请参阅SQLFiddle

于 2013-10-21T23:35:47.507 回答