显示单个表中重叠行的SQL查询?

3

我一直在Google和SO上搜索答案,但很难找到。甚至不确定我是否正确地提出了问题,但我会尽力表达:

我的数据:

Fruit  | Attributes
-------------------
Apple  | Dark Red
Apple  | Green
Apple  | Yellow
Apple  | Light Red
Apple  | Greenish Yellow
Apple  | Dark Yellow
Apple  | Brown
Banana | Yellow
Banana | Greenish Yellow
Banana | Dark Yellow 
Banana | Yellow 
Banana | Brown
Banana | Red
Banana | Black

我想运行一个查询,输出所有水果(在这种情况下只有苹果和香蕉)重叠的属性数量。
希望我表达清楚了...如果需要澄清,请告诉我。

你只想比较两个类别吗? - Anonymous
你想要统计具有相同属性但不同水果的行数吗? - Strawberry
1个回答

3

像这样的内容吗?

SELECT DISTINCT ATTRIBUTE, FRUIT 
FROM FRUIT_TABLE
WHERE ATTRIBUTE IN (
    SELECT ATTRIBUTE
    FROM FRUIT_TABLE
    GROUP BY ATTRIBUTE
    HAVING COUNT(DISTINCT FRUIT_NAME) > 1 )
ORDER BY ATTRIBUTE, FRUIT_NAME

我用类似的方法尝试了一下城市和州名,它也可以正常工作:

SELECT DISTINCT CITY, STATE 
FROM ADDRESS
WHERE CITY IN (
    SELECT CITY
    FROM ADDRESS
    GROUP BY CITY
    HAVING COUNT(DISTINCT STATE) > 1)
ORDER BY CITY, STATE    
  • 新不伦瑞克省巴斯
  • 安大略省巴斯
  • 新斯科舍省贝德福德
  • 魁北克省贝德福德
  • 曼尼托巴省布兰登
  • 蒙大拿州布兰登
  • 新不伦瑞克省布兰普顿
  • 安大略省布兰普顿

...等等

SELECT ATTRIBUTE, COUNT(*) FROM (
    SELECT DISTINCT ATTRIBUTE, FRUIT 
    FROM FRUIT_TABLE
    WHERE ATTRIBUTE IN (
        SELECT ATTRIBUTE
        FROM FRUIT_TABLE
        GROUP BY ATTRIBUTE
        HAVING COUNT(DISTINCT FRUIT_NAME) > 1 )
        ORDER BY ATTRIBUTE, FRUIT_NAME ) AS RESULTS
GROUP BY ATTRIBUTE

就是那样。谢谢! - lcm
我正在尝试解决一个问题,即如何返回重叠部分的实际出现次数。输出显示所有重叠数据已经正常运行...你有什么想法吗?理想情况下,我希望在输出中看到水果和出现次数这两列。 - lcm
如果你想要将整个结果集进行分组(参见编辑),只需将Fruit更改为fruit即可获得水果。 - Constantin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接