点击表:
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 |
有人知道怎么做吗?
答案 0 :(得分:21)
Select lid, count(distinct IP) as uhits
from hits
group by lid
答案 1 :(得分:7)
在你开始进入非常复杂的查询之前,SQL就是这样做的,所以它读起来就像一个自然的句子。首先,如果您可以准确地描述您的查询内容,那么您已经写了一半SQL。
在这种情况下,您可以描述您的问题:
从每个
lid
的表格中获取IP
以及唯一lid
的总计数。
唯一剩下的就是使用SQL关键字来翻译它。这里重要的是:
SELECT
COUNT
DISTINCT
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