MySQL Query获取唯一值的计数?

时间:2010-05-14 06:43:53

标签: mysql database

点击表:

hid | lid | IP
1   | 1   | 123.123.123.123
2   | 1   | 123.123.123.123
3   | 2   | 123.123.123.123
4   | 2   | 123.123.123.123
5   | 2   | 123.123.123.124
6   | 2   | 123.123.123.124
7   | 3   | 123.123.123.124
8   | 3   | 123.123.123.124
9   | 3   | 123.123.123.124

正如您所看到的,以下是各种盖子的独特命中:

lid 1: 1 unique hit
lid 2: 2 unique hits
lid 3: 1 unique hit

基本上,我需要一个返回以下内容的查询:

lid | uhits |
1   | 1     |
2   | 2     |
3   | 1     |

有人知道怎么做吗?

4 个答案:

答案 0 :(得分:21)

Select lid, count(distinct IP) as uhits
from hits
group by lid

答案 1 :(得分:7)

在你开始进入非常复杂的查询之前,SQL就是这样做的,所以它读起来就像一个自然的句子。首先,如果您可以准确地描述您的查询内容,那么您已经写了一半SQL。

在这种情况下,您可以描述您的问题:

  

从每个lid的表格中获取IP以及唯一lid的总计数。

唯一剩下的就是使用SQL关键字来翻译它。这里重要的是:

  • 获取 - > SELECT
  • count - > COUNT
  • unique - > DISTINCT
  • aggregate..for each&lt; field&gt; - &gt; SELECT <aggregate function>..GROUP BY <field>

所以,你上面的句子看起来像是:

  

SELECT lid以及COUNT DISTINCT IP我的表FROM GROUP BY的汇总lid

删除不必要的单词,并将其清理为使用SQL语法会留下最终查询:

SELECT hits.lid, COUNT(DISTINCT hits.IP) AS uhits
FROM hits
GROUP BY hits.lid

答案 2 :(得分:1)

SELECT lid, COUNT(DISTINCT IP)  
FROM hits  
GROUP BY lid

答案 3 :(得分:-2)

您需要使用group by:

SELECT lid, count(*)
    FROM Table
    GROUP BY lid