计算MySQL中的零个数[关闭]

Posted

技术标签:

【中文标题】计算MySQL中的零个数[关闭]【英文标题】:Counting number of zeros in MySQL [closed] 【发布时间】:2012-09-06 18:59:43 【问题描述】:

我有以下数据:

    htno         sub       marks        credits
      1           a          15            0
      1           b          10            0 
      1           c          25            4
      1           d          24            4
      1           e          22            2
      1           f          12            0
      2           a          22            4 
      2           b          15            0
      2           c          23            4
      2           d          18            2 
      2           e          20            4
      2           f          6             0
      3           a          22            4  n so on

我将向用户提供一个表单。如果用户输入他的电话号码“1”,那么它应该在 phpmysql 中以这种方式显示输出:

            Number of Backlogs           Passed Subjects
                   3                           3

这意味着它应该计算零的数量并显示积压的数量并计算非零的数量并显示通过的主题的数量。

我该怎么做?

【问题讨论】:

您忘记在此处粘贴您的查询? 仍然没有写 d 查询.. 我不知道 strt d 查询这个... @AryanManojRaj 您的问题可能被否决了,因为它有点不清楚。但是,您确实提供了示例数据和示例结果集,并解释了您想要实现的目标。稍加努力和耐心,我就能回答您的问题。 Why was this question closed? 我会说“过于本地化”而不是“不是一个真正的问题”。 【参考方案1】:

我从您的文本格式数据中去除了尾随和前导空格,并使用 SQL Fiddle 创建了一个等效的示例架构。设置如下所示:

CREATE TABLE Grades
    (`htno` int, `sub` varchar(1), `marks` int, `credits` int)
;

INSERT INTO Grades
    (`htno`, `sub`, `marks`, `credits`)
VALUES
    (1, 'a', 15, 0),
    (1, 'b', 10, 0),
    (1, 'c', 25, 4),
    (1, 'd', 24, 4),
    (1, 'e', 22, 2),
    (1, 'f', 12, 0),
    (2, 'a', 22, 4),
    (2, 'b', 15, 0),
    (2, 'c', 23, 4),
    (2, 'd', 18, 2),
    (2, 'e', 20, 4),
    (2, 'f', 6, 0),
    (3, 'a', 22, 4)
;

我做了以下假设:

每一行代表学生在某一学科的成绩。 “halticket 编号”唯一标识每个学生,并由列 htno 表示。 credits 列中的零值表示学生“积压”中的主题。 credits 列中大于零的值表示“通过的主题”。

此查询符合您的要求:

SELECT
  SUM(CASE WHEN credits = 0 THEN 1 ELSE 0 END) AS `Number of backlogs`,
  SUM(CASE WHEN credits > 0 THEN 1 ELSE 0 END) AS `Passed subjects`
FROM Grades
WHERE htno = 1;

我们使用WHERE 过滤器从 Grades 表中 SELECT 筛选出学生成绩为 1 的所有行。

第一个 CASE 表达式计算一个新列,如果 credits 不为零,则该列包含 0,否则包含 1。

第二个CASE 表达式计算一个新列,如果 credits 为非正数,则该列包含 0,否则包含 1。

你可以想象中间结果是这样的:

[Case expression 1] [Case expression 2]
0   1
0   1
1   0
1   0
1   0
0   1

我们将整个结果集视为一个聚合组,并使用SUM 函数将第一和第二计算列中的所有值相加。

第一列和是3,第二列和是3。

这将为您提供最终结果集。

您可以在SQL Fiddle 上试用我的交互式解决方案。

【讨论】:

以上是关于计算MySQL中的零个数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

有效地计算numpy数组中的零元素?

忽略 std::min 中的零并计算其他数字的最小值

2.尾部的零

LintCode 2. 尾部的零

2. 尾部的零简单

用中值替换numpy数组中的零