这个mysql代码的一点解释

时间:2010-02-07 15:38:10

标签: php sql mysql

之前我从另一个Q的某个人那里得到了这个答案,但我想对此进行解释,以便我完全理解这个问题。

我有一个表,其中一列包含“私人”或“公司”的值。 事实是,我想查看我的记录中有多少“私有”和“公司”值,以便我可以在以后用搜索结果显示它们。 因此,如果有4个公司广告和1个私人广告,则结果如下:

  Company = 4
  Private = 1
  All ads = 5

以下是我从某人那里得到的关于如何做到这一点的代码,换句话说,这就是我要解释的内容:

SELECT
    IFNULL( field , 'All ads' ) AS 'Type',
    COUNT( * )
FROM
    `table`
GROUP BY
    field
WITH ROLLUP

由于

3 个答案:

答案 0 :(得分:4)

我认为您不理解的部分是ROLLUP clause,这是不经常使用的。

本手册对此进行了详细描述,但基本思路是聚合每个组,然后在末尾获得一个额外的组,聚合所有组中的行,并将Field设置为NULL。

IFNULL表达式将NULL更改为可读字符串。您可以使用COALESCE代替IFNULL来获得相同的效果。

答案 1 :(得分:0)

选择Type字段,如果值为null,请使用All Ads作为默认值。

table中选择它们,然后按字段对它们进行分组。

据我所知,这将计算每个“类型”的每个条目的数量,并且所有具有空值的条目将简单地归入“所有广告”计数。


顺便说一句,如果你看一下IFNULL()函数,很容易理解。它明确指出IF NULL,因此它检查某些内容是否为空。然后传递一个字段名称和一个静态值。有意义的是它正在检查该字段值是否为假。唯一的另一个东西就是值,所以我们可以得出结论,如果字段值为null,它将使用静态值。

答案 2 :(得分:0)

从表格“table”中选择所有广告,按字段对它们进行分组,这意味着所有“公开”的广告都会被放入具有关联号码的“公共”广告组中。因此,如果您有10个公开广告,则它们全部归为“公共广告”,其值为10。

这有意义吗?