3

对于我们的在线订购平台,我们有一个商店送货到的街道数据库。基于我们 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 将返回“随机街道”

SELECT street_name, COUNT(*)
FROM streets
GROUP BY street_name
HAVING COUNT(*) > 1;
4

2 回答 2

5

GROUP BY您可以通过and实现此目的HAVING

SELECT * from streets group by street_name having count(*) > 1

这是一个工作示例:SQLFiddle。下面是一篇您可能会感兴趣的短文:HAVING 和 GROUP BY SQL 子句


根据您的编辑,将返回所需结果的查询将是:

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. 我在更新的 SQLFiddle中包含了一个示例。

于 2013-02-04T11:15:06.677 回答
4

试试这个,

SELECT street_name, COUNT(*)
FROM streets
GROUP BY street_name
HAVING COUNT(*) > 1;
于 2013-02-04T11:16:22.560 回答