【问题标题】:Little explanation of this mysql code这个mysql代码的一点解释
【发布时间】:2010-02-07 15:38:09
【问题描述】:

我之前在另一个 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

谢谢

【问题讨论】:

  • 对我来说看起来相当直接?你不明白哪一部分?
  • IFNULL (field, 'all ads') AS 'type', count(*) 部分
  • IFNULL(field, 'all ads') AS 'Type' 只是轻微的美化,不会改变结果。将其替换为 field 以获得几乎完全相同的结果,但查询更简单,更易于理解。

标签: php sql mysql


【解决方案1】:

我假设你不明白的部分是ROLLUP clause,它不经常使用。

手册描述得很好,但基本思想是每个组都被聚合,然后你在最后得到一个额外的组,它聚合来自所有组的行,其中Field 设置为 NULL。

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

【讨论】:

    【解决方案2】:

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

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

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


    顺便说一句,如果您查看IFNULL() 函数,很容易弄清楚。它清楚地说明了IF NULL,因此它正在检查某些内容是否为空。然后向它传递一个字段名称和一个静态值。检查该字段值是否为假是有道理的。唯一的另一件事就是值,所以我们可以得出结论,如果字段值为空,它将使用静态值。

    【讨论】:

      【解决方案3】:

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

      这有意义吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多