我有一张搜索记录表。列是IP,查询,时间戳。我想要的是通过“查询”对数据进行分组,并计算该“查询”的IP地址唯一实例的数量。以下是该表的示例:
TABLE: SEARCHES
IP | query | timestamp
1.2.3.4 oranges 1485215625
1.2.3.5 bananas 1485215643
1.2.3.4 oranges 1485215655
1.2.3.6 apples 1485215662
1.2.3.7 oranges 1485215711
1.2.3.7 pears 1485215730
我正在使用以下mysql查询:
SELECT query, COUNT(query) as num FROM searches WHERE timestamp > ".$sometimestamp." GROUP BY query
我的目标是检索以下数据:
oranges [2]
bananas [1]
apples [1]
pears [1]
我的查询很接近,但会产生:
oranges [3] <-- IP address 1.2.3.4 searched for this twice, counting 3 total
bananas [1]
apples [1]
pears [1]
我需要一种方法,它只能为每个IP地址计算一次唯一的搜索查询(但不能忽略来自同一IP地址的多个唯一查询)。
答案 0 :(得分:1)
使用count distinct:
SELECT
`query`,
COUNT(DISTINCT `IP`) as num
FROM `searches`
WHERE `timestamp` > ".$sometimestamp."
GROUP BY `query`