我搜索了很多,但无法找到针对此特定问题的任何解决方案。我有一个表名header
,结构看起来像这样(带有一些示例值)
id name choice1 choice2 choice3 choice4 choice5
1 AAA Book Movie Fishing
2 XXX Music Dine Dancing Flirting
3 CCC Food Music Pub Night
我需要知道填充了值的列数。因此,对于id 1
,我想获得5
。id 2
,我想获得{{1} }}
我该怎么做?
提前致谢。
答案 0 :(得分:1)
您可以使用条件表达式执行此操作:
select t.*,
((id is not null) + (name is not null) + (choice1 is not null) + (choice2 is not null) +
(choice3 is not null) + (choice4 is not null) + (choice5 is not null)
) as NumColumnsWithValues
from table t;
MySQL将布尔表达式视为数字上下文中的整数,使用" true"是1和"假"为0.只需添加结果即可获得所需的值。在其他数据库中,您需要使用case
语句。
答案 1 :(得分:1)
更好的数据库设计是拥有一个名称表和一个选择表。然后你可以做类似的事情:
SELECT n.id, COUNT(c.id)
FROM n
JOIN c ON c.uid = n.id
该术语是数据库规范化'现在一点点阅读将为你节省几天的痛苦。