You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL统计值大于0的列数及新增对应计算字段技术咨询

解决你的两个SQL需求

Alright, let's break down how to tackle both of your SQL problems using your sample table structure (Account_number, DAY_0, DAY_30, DAY_60, DAY_90, DAY_120) and example data (acc_001 with values 99, 10, 0, 0.2, 0) as reference.

需求1:统计值大于0的列的相关数量

I'll cover two common scenarios here—pick the one that matches your actual need:

场景A:统计每个数值列中值大于0的行数

If you want to know how many records in each DAY_* column have a value greater than 0, use aggregate functions with CASE statements:

SELECT
  SUM(CASE WHEN DAY_0 > 0 THEN 1 ELSE 0 END) AS day_0_positive_count,
  SUM(CASE WHEN DAY_30 > 0 THEN 1 ELSE 0 END) AS day_30_positive_count,
  SUM(CASE WHEN DAY_60 > 0 THEN 1 ELSE 0 END) AS day_60_positive_count,
  SUM(CASE WHEN DAY_90 > 0 THEN 1 ELSE 0 END) AS day_90_positive_count,
  SUM(CASE WHEN DAY_120 > 0 THEN 1 ELSE 0 END) AS day_120_positive_count
FROM your_table_name;

For your sample data (only the acc_001 row), this query returns:
day_0_positive_count=1, day_30_positive_count=1, day_60_positive_count=0, day_90_positive_count=1, day_120_positive_count=0.

场景B:统计表中有多少个数值列存在至少一个大于0的值

If you want to count how many DAY_* columns have at least one record with a value greater than 0, use a subquery with UNION ALL:

SELECT COUNT(*) AS positive_column_count
FROM (
  SELECT 'DAY_0' AS col_name FROM your_table_name WHERE DAY_0 > 0 LIMIT 1
  UNION ALL
  SELECT 'DAY_30' AS col_name FROM your_table_name WHERE DAY_30 > 0 LIMIT 1
  UNION ALL
  SELECT 'DAY_60' AS col_name FROM your_table_name WHERE DAY_60 > 0 LIMIT 1
  UNION ALL
  SELECT 'DAY_90' AS col_name FROM your_table_name WHERE DAY_90 > 0 LIMIT 1
  UNION ALL
  SELECT 'DAY_120' AS col_name FROM your_table_name WHERE DAY_120 > 0 LIMIT 1
) AS cols_with_positive;

For your sample data, this returns positive_column_count=3 (since DAY_0, DAY_30, and DAY_90 have values > 0).

需求2:新增计算字段统计当前行中值大于0的列总数

To add a temporary calculated field (or a permanent one) that counts how many DAY_* columns have values > 0 for each row:

临时查询字段(仅在查询结果中显示)

Use CASE statements summed together to get the count per row:

SELECT
  Account_number,
  DAY_0,
  DAY_30,
  DAY_60,
  DAY_90,
  DAY_120,
  (
    CASE WHEN DAY_0 > 0 THEN 1 ELSE 0 END +
    CASE WHEN DAY_30 > 0 THEN 1 ELSE 0 END +
    CASE WHEN DAY_60 > 0 THEN 1 ELSE 0 END +
    CASE WHEN DAY_90 > 0 THEN 1 ELSE 0 END +
    CASE WHEN DAY_120 > 0 THEN 1 ELSE 0 END
  ) AS positive_column_total
FROM your_table_name;

For your acc_001 row, positive_column_total will be 3 (since 99, 10, and 0.2 are greater than 0).

永久新增字段到表中(自动同步更新)

If you want to add this field permanently to the table (works for MySQL; adjust syntax slightly for other databases like PostgreSQL/SQL Server):

ALTER TABLE your_table_name
ADD COLUMN positive_column_total INT GENERATED ALWAYS AS (
    CASE WHEN DAY_0 > 0 THEN 1 ELSE 0 END +
    CASE WHEN DAY_30 > 0 THEN 1 ELSE 0 END +
    CASE WHEN DAY_60 > 0 THEN 1 ELSE 0 END +
    CASE WHEN DAY_90 > 0 THEN 1 ELSE 0 END +
    CASE WHEN DAY_120 > 0 THEN 1 ELSE 0 END
) STORED;

This field will auto-calculate values for existing rows and update automatically when you modify data in the DAY_* columns.

内容的提问来源于stack exchange,提问作者irfan3012

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 18:22:37