用于标识具有重复项的对的SQL查询

时间:2015-03-21 09:42:35

标签: mysql sql

我正在尝试编写一个查询,该查询将从我的数据库中的同一IP地址配对展示次数和转化次数。我有一张展示位置及其IP地址,展示可以是“查看”或“转化”类型(在“名称”列中定义)。

基本上,我需要识别具有相同IP地址的记录组,其中包含视图和转换。

经过一个小时的谷歌搜索,我已经到了下面,这不是很远,但应该了解所涉及的对象:

SELECT ip_address, name, COUNT(1) as CNT 
FROM Impressions
GROUP BY ip_address, name;

有人可以建议最好的方法吗?

3 个答案:

答案 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;