问题:
假设有一个简单(但很大)的表 foods
id name
-- -----------
01 ginger beer
02 white wine
03 red wine
04 ginger wine
Run Code Online (Sandbox Code Playgroud)
我想要计算有多少条目具有特定的硬编码模式,比如包含单词'ginger'(LIKE '%ginger%')或'wine'(LIKE '%wine%'),或其他任何内容,并将这些数字按照注释写入行.我正在寻找的结果如下
comment total
--------------- -----
contains ginger 2
for wine lovers 3
Run Code Online (Sandbox Code Playgroud)
解决方案1(格式正确但效率低):
可以使用UNION ALL和构造以下内容
SELECT * FROM
(
(
SELECT
'contains ginger' AS comment,
sum((name LIKE '%ginger%')::INT) AS total
FROM foods
)
UNION ALL
(
SELECT
'for wine lovers' AS comment,
sum((name LIKE '%wine%')::INT) AS total
FROM foods
)
)
Run Code Online (Sandbox Code Playgroud)
显然它的工作方式类似于简单地执行多个查询并在之后将它们缝合在一起.这是非常低效的.
解决方案2(高效但格式错误): …
说我有以下内容:
我想过滤匹配位置I处与V值相同的所有M行.我相信Matlab索引如果足够强大,可以在没有循环的情况下完成.但是怎么样?
当前解决方案:运行所有列并更新过滤的行位置F(m -by- 1逻辑).
F = true(m,1);
for k = 1:n;
if I(k);
F = F & (M(:,k)==V(k));
end;
end;
M = M(F,:);
Run Code Online (Sandbox Code Playgroud)