MySQL / PHP计数非NULL的列数?

时间:2011-10-11 05:37:01

标签: php mysql

我从MySQL数据库中选择了许多数据库列。我想计算一个非NULL的特定集合返回的MySQL行数。

例如......

SELECT p.wavURL1, p.wavURL2, p.wavURL3, p.wavURL4,  etc.

我可以在PHP中计算不是NULL的数量吗?

5 个答案:

答案 0 :(得分:2)

如果我理解你的问题,这应该做你想要的:

SELECT COUNT(COALESCE(col1, col2, ..., col16)) AS cnt
FROM yourtable

有关详细信息,请参阅MySQL手册:

  • COUNT - 返回SELECT语句检索的行中expr的非NULL值的计数。
  • COALESCE - 返回列表中的第一个非NULL值,如果没有非NULL值,则返回NULL。

答案 1 :(得分:1)

您可以为每个返回1或0写一个case语句,具体取决于它们是否为null。然后你可以总结结果

SELECT
    (
        CASE WHEN p.wavURL1 IS NULL THEN 0 ELSE 1 END +
        CASE WHEN p.wavURL2 IS NULL THEN 0 ELSE 1 END +
        CASE WHEN p.wavURL3 IS NULL THEN 0 ELSE 1 END +
        CASE WHEN p.wavURL4 IS NULL THEN 0 ELSE 1 END
    ) AS num_urls
FROM (
    SELECT 
        'a' AS wavURL1,
        'b' AS wavURL2,
        'c' AS wavURL3,
        NULL AS wavURL4
    ) AS p
;

这会为我num_urls返回3,因为输入中有三个非空​​值。

答案 2 :(得分:1)

这应该这样做:

SELECT
 if(p.wavURL1 is null,0,1)+
 if(p.wavURL2 is null,0,1)+
 if(p.wavURL3 is null,0,1)+
 if(p.wavURL4 is null,0,1) as count

答案 3 :(得分:0)

概念上,NULL表示“缺少未知值”

SELECT COUNT(*) AS totalRows
FROM tableNAME
WHERE columnName IS NOT NULL

答案 4 :(得分:0)

您可以通过发出SQL语句直接获取计数:

SELECT COUNT (*) FROM table p WHERE 
      <someconditions> 
      AND p.wavURL1 IS NOT NULL 
      AND p.wavURL2 IS NOT NULL 
      AND p.wavURL3 IS NOT NULL  
      AND p.wavURL4 IS NOT NULL

另一种可能性是coalesce方法。但对此有不同的看法。 IS NULL(不是ANSI标准)和coalesce之间的性能可能不同。

请参阅:http://sqlserverperformance.idera.com/tsql-optimization/performance-coalesce-null/

  • 如果性能无关紧要,请选择合并
  • 如果性能很重要,则需要对两种变体进行基准测试,以确定哪种变体优于另一种变体。

如果您想在PHP本身中说明它,请计算它。您可以迭代每一行,并为每次迭代将计数变量增加一个。

我会认为声明方法更合适。