Sql 简化多组子句

Sql 简化多组子句,sql,select,count,group-by,Sql,Select,Count,Group By,好的,我有以下问题: SELECT p.[PAGE_ID] , count(*) AS COUNT FROM ( SELECT p.[PAGE_ID] , o.country_id FROM [PAGES] p JOIN PAGE_ITEM_POSITION pip ON p.PAGE_ID = pip.PAGE_ID JOIN items i ON pip.item_id=i.item_id GROUP BY tp.PAGE_ID

好的,我有以下问题:

SELECT p.[PAGE_ID] ,
       count(*) AS COUNT
FROM
  ( SELECT p.[PAGE_ID] ,
           o.country_id
   FROM [PAGES] p
   JOIN PAGE_ITEM_POSITION pip ON p.PAGE_ID = pip.PAGE_ID
   JOIN items i ON pip.item_id=i.item_id
   GROUP BY tp.PAGE_ID,
            i.country_id) AS p
GROUP BY p.page_id
因此,页面有项目,项目有国家,项目存在于页面上的特定位置(尽管这与问题无关)。这里没什么复杂的

我想知道的是,每一页上代表了多少个不同的国家,这正是上面的查询所做的。然而,我忍不住觉得这有点太复杂了

内部查询组,以便根据页面直接列出特定国家/地区,然后外部部分组根据id再次生成,以提供计数

可以简化此查询吗?

尝试以下操作:

SELECT p.[PAGE_ID], COUNT(DISTINCT i.country_id)
FROM [PAGES] p
INNER JOIN PAGE_ITEM_POSITION pip ON p.PAGE_ID = pip.PAGE_ID
INNER JOIN items i ON pip.item_id=i.item_id
GROUP BY p.PAGE_ID 

如果您能向我们展示您的DB模式会更好。您能创建一个SQLFIDLE吗?你认为现有的查询复杂吗?不,我不认为它复杂,但我确实认为它比它需要的复杂。那太好了。正是我要找的!我有一种感觉,我可以对伯爵做点什么,但我永远也不能把我的手指放在上面。