mysql如何算值_mysql – 如何计算数据库的水平值?

没有内置语法允许您动态引用一组列,即没有明确命名它们.如果需要动态性,则需要查询元数据以获取所需的列名,然后动态构建最终查询.

但在此之前,您仍然需要了解动态查询应该如何完成执行作业本身.因此,您首先需要在有限列集上解决问题.

解决这个问题的方法不止一种. method suggested by @bluefeet可能是更清晰,效率更低的一种.您可以尝试至少两种选择:

>使用条件聚合分别计算每列,并将所有结果合并到一个表达式中:

SELECT

COUNT(DATA1 > 0 OR NULL) +

COUNT(DATA2 > 0 OR NULL) +

COUNT(DATA3 > 0 OR NULL) +

COUNT(DATA4 > 0 OR NULL) +

COUNT(DATA5 > 0 OR NULL) +

COUNT(DATA6 > 0 OR NULL) +

COUNT(DATA7 > 0 OR NULL) AS TOTAL

FROM yourtable

;

(OR NULL技巧在here中解释.)

>使用交叉连接取消数据列到虚拟表,然后将条件应用于不透明的列:

SELECT

COUNT(*) AS TOTAL

FROM (

SELECT

CASE s.col

WHEN 'DATA1' THEN DATA1

WHEN 'DATA2' THEN DATA2

WHEN 'DATA3' THEN DATA3

WHEN 'DATA4' THEN DATA4

WHEN 'DATA5' THEN DATA5

WHEN 'DATA6' THEN DATA6

WHEN 'DATA7' THEN DATA7

END AS DATA

FROM yourtable

CROSS JOIN (

SELECT 'DATA1' AS col

UNION ALL SELECT 'DATA2'

UNION ALL SELECT 'DATA3'

UNION ALL SELECT 'DATA4'

UNION ALL SELECT 'DATA5'

UNION ALL SELECT 'DATA6'

UNION ALL SELECT 'DATA7'

) s

) s

WHERE DATA > 0

;

(在某种程度上,这类似于@ bluefeet的建议,它只是不使用任何UNION.)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值