之前我从另一个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
由于
答案 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。
这有意义吗?