我的数据库中有一个包含图书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记录,这是一个问题吗?谢谢你的回答答案 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
最后这是一个品味问题。 ; - )