小编Pra*_*sas的帖子

如何有效地将不同的值计入SQL中的不同行?

问题:

假设有一个简单(但很大)的表 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(高效但格式错误): …

sql database postgresql performance amazon-redshift

9
推荐指数
1
解决办法
862
查看次数

通过多列值w/o循环过滤矩阵(Matlab)?

说我有以下内容:

  • 数据矩阵M(m -by- n);
  • 匹配行V(1- by- n);
  • 匹配位置I(1- by- n logical);

我想过滤匹配位置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)

arrays matlab matrix

6
推荐指数
1
解决办法
468
查看次数