如何在 GROUP BY c 之后计数(不同的 a,b)



我有一个包含三列的表格:newspaperpersonpage。 一个人可以多次阅读一个页面,这意味着我们可能会有这样的表格:

newspaper   person  page
---------   ------  ----
NY Times      A      1
NY Times      A      1
NY Times      A      1
NY Times      A      2
NY Times      B      8
NY Times      B      9
NY Times      B      9
WashPost      A      1
WashPost      B      1

我想为每份报纸COUNT(=GROUP BY newspaper(,某人阅读页面的次数。为了澄清我的意思,对于上面的输入表,结果必须如下所示:

newspaper     COUNT
---------   --------
NY Times        4   =>  (A,1) (A,2) (B,8) (B,9)
WashPost        2   =>  (A,1) (B,1)

我的第一次尝试是以下查询,sqlite不允许,但澄清了我需要什么:

SELECT newspaper, COUNT(DISTINCT person, page)
FROM T 
GROUP BY newspaper

作为一种解决方法,我可以使用||连接personpage列,并且查询运行良好,但我正在考虑更好的解决方案。

SELECT newspaper, COUNT(DISTINCT person || page)
FROM T 
GROUP BY newspaper

你需要的是一个distinct来摆脱重复,然后为每份报纸count(*)行。为此,我们使用子查询:

select newspaper, count(*) as reads_no
from (
select distinct newspaper, person, page
from t
) t
group by newspaper

您不应该连接两个字段并对其进行区分,因为除非与一些您知道字段中永远不会存在的疯狂分隔符一起使用,否则您可能会丢弃某些值。请参阅以下示例。

'aab' || 'xzy' = 'aa' || 'bxzy'

最新更新