对于我们的在线订购平台,我们有一个商店提供的街道数据库.基于我们POS系统的出口.
在现实世界中,只有一家商店可以送到任何确切的街道地址.在我们的数据库中并非如此,其中街道名称在多个商店中显示.
表格是这样的 - 简化:
街道
street_id
street_name
street_from
street_to
store_id
Run Code Online (Sandbox Code Playgroud)
表中当前行的一些示例:
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
Run Code Online (Sandbox Code Playgroud)
关于如何获得所有行的任何想法,其中相同的街道名称被引用到两个或更多商店?在上面的例子中,我希望查询返回"非常好的街道"和"独特的街道"..我不想要"随机街道",因为它只引用了商店号#10.
因此以下SQL将返回"随机街道"
SELECT street_name, COUNT(*)
FROM streets
GROUP BY street_name
HAVING COUNT(*) > 1;
Run Code Online (Sandbox Code Playgroud)
你可以做到这一点的GROUP BY和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
Run Code Online (Sandbox Code Playgroud)
注意使用DISTINCT store_id.如果有另一个random street引用商店#10,它将无法通过因为DISTINCT.我在更新的SQLFiddle中包含了一个示例.
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |