计算不同的值

时间:2014-07-15 01:18:20

标签: mysql sql group-by

我有一个名为visits的表,其中包含以下内容 link_ididbrowsercountryreferer

现在,这基本上记录了某个链接的访问,并插入了访问数据库中该链接的任何人的浏览器,国家和参考者

现在我需要显示每个链接的统计信息

我使用以下查询来获取所有浏览器

SELECT browser, COUNT(browser) FROM visits GROUP BY browser

产生类似

的东西

Browser Count(Browser) Internet Explorer | 5 Chrome | 3

现在这只适用于浏览器,但我正在寻找一种方法来计算referersbrowserscountries

的所有出现次数

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:0)

要对数据库中多个不同的出现值计数进行计数,只需一个查询就可以很容易地完成

请记住,SELECT COUNT(tablename)中的列标题仅返回一列,并且仅返回一个数值。对于每个不同的值(来自GROUP BY子句),您都有两列:值,计数。要对不同的字段进行计数,您将需要三个:字段,值,计数,如果要对不同表中的不同字段进行计数,则将需要四个:表,字段,值,计数。

观察下面的UNION我如何用于两个不同的表:

SELECT
        "Table1" AS TableName,
        "Field1" AS Field,
        Field1 AS Value, 
        COUNT(Field1) AS COUNT
    FROM Table1
    GROUP BY Value
UNION
SELECT
        "Table2" as TableName,
        "Field2" as Field,
        Field2 as Value,
        COUNT(Field2) AS COUNT
    FROM Table2
    GROUP BY Value

您会注意到我需要使用别名:"Table2" as TableName,这是因为UNION列应具有匹配的列标题。

因此您可以直观地看到返回的结果,看看:

+-------------------+----------------+----------+--------+
| TableName         | Field          | Value    | COUNT  |
+-------------------+----------------+----------+--------+
| ItemFee           | PaymentType    |          |    228 |
| ItemFee           | PaymentType    | All      |      1 |
| ItemFee           | PaymentType    | PaidOnly |      1 |
| Person            | Presenter      |          | 692258 |
| Person            | Presenter      | N        |    590 |
| Person            | Presenter      | Y        |   8103 |
+-------------------+----------------+----------+--------+