Php 如何选择行数乘以非零列?(mysql)

Php 如何选择行数乘以非零列?(mysql),php,mysql,sql,Php,Mysql,Sql,假设我有一张桌子: col1, col2, col3 1 0 1.3 0 0 0 0 1 0 1 1.5 1 现在,假设每行都有一个“权重”,计算如下: (col1 > 0 ? 1 : 0) + (col2 > 0 ? 1 : 0) + (col3 > 0 ? 1 : 0) 如何选择所有行的总重量 根据我给出的数据,总权重为2+0+1+3=6您只需要一个聚合SUM() SELECT SUM( (CASE

假设我有一张桌子:

col1, col2, col3
1     0     1.3
0     0     0
0     1     0
1     1.5   1
现在,假设每行都有一个“权重”,计算如下:

(col1 > 0 ? 1 : 0) + (col2 > 0 ? 1 : 0) + (col3 > 0 ? 1 : 0)
如何选择所有行的总重量


根据我给出的数据,总权重为2+0+1+3=6

您只需要一个聚合
SUM()

SELECT
  SUM(
   (CASE WHEN col1 > 0 THEN 1 ELSE 0 END)
   + (CASE WHEN col2 > 0 THEN 1 ELSE 0 END)
   + (CASE WHEN col3 > 0 THEN 1 ELSE 0 END)
  ) AS total_weight
FROM your_table

我在这里使用
CASE WHEN…
,因为它可以跨任何RDBMS移植。由于MySQL将为条件返回布尔值0或1,因此可以在MySQL中简化为:

SELECT
  SUM(
   (col1 > 0) /* returns 1 or 0 */
    + (col2 > 0)
    + (col3 > 0)
   ) AS total_weight
FROM your_table