我正在尝试编写一个查询,该查询将从我的数据库中的同一IP地址配对展示次数和转化次数。我有一张展示位置及其IP地址,展示可以是“查看”或“转化”类型(在“名称”列中定义)。
基本上,我需要识别具有相同IP地址的记录组,其中包含视图和转换。
经过一个小时的谷歌搜索,我已经到了下面,这不是很远,但应该了解所涉及的对象:
SELECT ip_address, name, COUNT(1) as CNT
FROM Impressions
GROUP BY ip_address, name;
有人可以建议最好的方法吗?
答案 0 :(得分:3)
您需要将HAVING
子句与条件计数一起使用。您还需要从name
中移除GROUP BY
,因为这会分别处理您的两种不同类型。
SELECT ip_address,
COUNT(CASE WHEN Name = 'View' THEN 1 END) AS Views,
COUNT(CASE WHEN Name = 'Conversion' THEN 1 END) AS Conversions,
COUNT(1) as CNT
FROM Impressions
GROUP BY ip_address
HAVING COUNT(CASE WHEN Name = 'View' THEN 1 END) > 0
AND COUNT(CASE WHEN Name = 'Conversion' THEN 1 END) > 0;
答案 1 :(得分:0)
你可以试试这个:
SELECT
i.ip_address AS ip,
GROUP_CONCAT(DISTINCT CAST(i.name AS CHAR)) AS nameList,
SUM(IF(i.name = 'View', 1, 0)) AS viewCount,
SUM(IF(i.name = 'Conversion', 1, 0)) AS conversionCount
FROM Impressions i
GROUP BY i.ip_address;
您将获得一个以逗号分隔的名称列表,其中包含' view' &安培; '转换'和他们各自的计数。
答案 2 :(得分:-1)
请尝试......
SELECT ip_address,name,COUNT(1)cnt as CNT FROM Impressions GROUP BY名称,IP_address 有计数(IP_address)> 1;