我有一个包含三列的表格:newspaper
、person
、page
。 一个人可以多次阅读一个页面,这意味着我们可能会有这样的表格:
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
作为一种解决方法,我可以使用||
连接person
和page
列,并且查询运行良好,但我正在考虑更好的解决方案。
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'