MySQL查询以获取唯一值的计数?

MySQL查询以获取唯一值的计数?,mysql,database,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 |

点击表:

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     |
有人知道如何获取吗?

您需要通过以下方式使用组:

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

在您开始进行非常复杂的查询之前,SQL是这样生成的,所以它读起来非常像一个自然的句子。因此,首先,如果您能够准确地描述您想要从查询中得到什么,那么您已经编写了一半的SQL

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

从我的表中为每个
lid
获取
lid
和唯一
IP
的合计计数

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

  • 获取->
    选择
  • 计数->
    count
  • 唯一->
    不同的
  • 聚合..对于每个->
    选择..分组依据
所以,你上面的句子看起来像:

选择
lid
并从我的表格分组依据
lid
中选择
不同的
IP

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

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

我已通过在每行缩进4个空格来重新格式化代码。请参阅编辑屏幕右侧的格式帮助(正确答案+1)+好答案+1(你也比我快)。请原谅我的编辑,但我冒昧地删除了一个额外的(不平衡的)右括号。+1:第一次提交格式正确且没有任何错误的答案。实际上,分组方式使它们与众不同。
SELECT hits.lid, COUNT(DISTINCT hits.IP) AS uhits
FROM hits
GROUP BY hits.lid
SELECT lid, COUNT(DISTINCT IP)  
FROM hits  
GROUP BY lid