我有一个测量称为表措施.该表有一列用于位置,第二列用于相应的值(示例简化).
该表看起来像(注意loc1的 2个条目):
location | value
-----------------
loc1 | value1
loc1 | value2
loc2 | value3
loc3 | value4
loc4 | value5
Run Code Online (Sandbox Code Playgroud)
我现在想要制定一个SQL查询(实际上我使用的是sqlite),它只返回表的前两行(即loc + value1和loc1 + value2),因为这个位置在这个表中有多个条目.
伪文字公式将:显示位置的行,这些行在整个表
伪码中出现不止一次:
SELECT * from measures WHERE COUNT(location over the whole table) > 1
Run Code Online (Sandbox Code Playgroud)
解决方案可能非常简单,但不知怎的,我似乎没有破解坚果.
到目前为止我所拥有的是一个SELECT语句,它返回具有多个条目的位置.作为下一步,我将需要与此查询返回的位置对应的所有行:
SELECT location FROM measures GROUP BY location HAVING count(*) > 1
Run Code Online (Sandbox Code Playgroud)
所以作为下一步,我尝试使用相同的表进行JOIN并合并上面的查询,但结果不正确.我试过这样,但这是错的:
select t1.location, t1.value
from
measures as t1
join
measures as t2 on t1.location = t2.location
group by
t2.location
having count(*) > 1
Run Code Online (Sandbox Code Playgroud)
感谢帮助!
你是正确的使用HAVING,并考虑使用自我加入...只是略微关闭操作的顺序...
select m1.location, m1.value
from measures m1
join (
select location
from measures
group by location
having count(*) > 1
) m2 on m2.location = m1.location
Run Code Online (Sandbox Code Playgroud)
子选择获取具有多个条目的所有位置...然后再次将其连接到表以获得完整结果.
使用嵌套选择:
SELECT location,value,type,value_added
FROM measures
WHERE location IN
(SELECT location FROM measures
GROUP BY location HAVING COUNT(*)>1)
Run Code Online (Sandbox Code Playgroud)
(语法是靠记忆,可能有点偏离)
| 归档时间: |
|
| 查看次数: |
23356 次 |
| 最近记录: |