MySQL Query计算值

时间:2016-04-26 15:40:14

标签: mysql

我的数据库中有一个包含图书ISBN和供应商的表格:

ISBN | Supplier

12345 | iSupply
12345 | disal
13333 | disal
14444 | iSupply
15555 | disal
16666 | emporio

我需要创建一个查询,显示仅在一个供应商中出现的ISBN数。在此示例中,查询应显示:

iSupply (1)
disal (2)
emporio (1)

因为ISBN 12345同时出现在iSupply和disal上,所以不应该计算。

有可能吗?

编辑:我正在尝试使用你们发布的一些解决方案,但它仍然会加载5-10而没有结果。该数据库有100-150k记录,这是一个问题吗?谢谢你的回答

3 个答案:

答案 0 :(得分:1)

由供应商分组并获得每组的计数。内部查询过滤掉多个供应商中的ISBN

select supplier, count(*)
from your_table
where isbn not in 
(
    select isbn
    from your_table
    group by isbn
    having count(*) > 1
)
group by supplier

答案 1 :(得分:1)

SELECT x.supplier
     , COUNT(*)  
  FROM my_table x 
  LEFT 
  JOIN my_table y 
    ON y.isbn = x.isbn 
   AND y.supplier <> x.supplier 
 WHERE y.isbn IS NULL 
 GROUP 
    BY x.supplier;

答案 2 :(得分:0)

好吧,我的回答显然有点迟了,但它确实有效:

SELECT suppl,count(*) cnt FROM tmp
WHERE isbn IN (SELECT isbn FROM tmp GROUP BY isbn HAVING COUNT(*)=1)
GROUP BY suppl

where子句中的子查询仅返回唯一显示的isbn,然后外部select将每个供应商的计数组合在一起。

是的,我只是抬头发现它几乎与“juergen d”相同,但它是独立写的。

或者,“主题的变体”:

SELECT suppl,count(*) cnt FROM tmp t
WHERE not exists (SELECT 1 FROM tmp WHERE isbn=t.isbn AND suppl!=t.suppl )
GROUP BY suppl

最后这是一个品味问题。 ; - )