我从MySQL数据库中选择了许多数据库列。我想计算一个非NULL的特定集合返回的MySQL行数。
例如......
SELECT p.wavURL1, p.wavURL2, p.wavURL3, p.wavURL4, etc.
我可以在PHP中计算不是NULL
的数量吗?
答案 0 :(得分:2)
如果我理解你的问题,这应该做你想要的:
SELECT COUNT(COALESCE(col1, col2, ..., col16)) AS cnt
FROM yourtable
有关详细信息,请参阅MySQL手册:
答案 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本身中说明它,请计算它。您可以迭代每一行,并为每次迭代将计数变量增加一个。
我会认为声明方法更合适。