对于我们的在线订购平台,我们有一个商店提供的街道数据库。 基于POS系统的导出。
在现实世界中,只有一家商店可以送到任何确切的街道地址。 在我们的数据库中并非如此,其中街道名称在多个商店中显示。
表格是这样的 - 简化:
街道
street_id
street_name
street_from
street_to
store_id
目前在表中的行的一些示例:
1, "very nice street", 1, 999, 6
2, "very nice street", 1, 999, 10
3, "random street", 1, 53, 10
4, "random street", 2, 64, 10
5, "unique street", 1, 999, 10
6, "unique street", 1, 999, 6
关于如何获取所有行的任何想法,其中相同的街道名称被引用到两个或更多商店?在上面的例子中,我希望查询返回“非常漂亮的街道”和“独特的街道”..我不想要“随机街道”,因为它只引用了商店号#10。
因此,以下SQL将返回“random street”
SELECT street_name, COUNT(*)
FROM streets
GROUP BY street_name
HAVING COUNT(*) > 1;
答案 0 :(得分:5)
您可以通过GROUP BY
和HAVING
实现此目的:
SELECT * from streets group by street_name having count(*) > 1
这是一个工作样本:SQLFiddle。这是一篇你可能会感兴趣的简短文章:The HAVING and GROUP BY SQL clauses。
根据您的编辑,将返回所需结果的查询将是:
SELECT street_name, store_id, count(*)
FROM streets
GROUP BY street_name
HAVING COUNT(DISTINCT store_id) > 1
请注意DISTINCT store_id
的使用。如果有另一个random street
引用商店#10,则由于DISTINCT
而无法通过。我在updated SQLFiddle中添加了一个示例。
答案 1 :(得分:4)
试试这个,
SELECT street_name, COUNT(*)
FROM streets
GROUP BY street_name
HAVING COUNT(*) > 1;