小编Jas*_*mje的帖子

函数和子程序有什么区别?

函数和子程序有什么区别?有人告诉我,函数和子程序之间的区别如下:

函数接受参数,在本地工作,不会改变任何值或使用其范围之外的任何值(高内聚).它还返回一些值.子程序直接与调用它的调用者或代码段的值一起工作,并且不返回值(低内聚),即将一些代码分支到其他代码以便进行一些处理并返回.

这是真的?或者没有区别,只有两个术语来表示一个?

terminology

38
推荐指数
3
解决办法
8万
查看次数

MySQL中GROUP_CONCAT的反义词是什么?

我似乎反对这个问题很多,我的数据格式如下:

+----+----------------------+
| id | colors               |
+----+----------------------+
| 1  | Red,Green,Blue       |
| 2  | Orangered,Periwinkle |
+----+----------------------+
Run Code Online (Sandbox Code Playgroud)

但我希望它的格式如下:

+----+------------+
| id | colors     |
+----+------------+
| 1  | Red        |
| 1  | Green      |
| 1  | Blue       |
| 2  | Orangered  |
| 2  | Periwinkle |
+----+------------+
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?什么是这种操作甚至叫做?

mysql csv format pivot group-concat

28
推荐指数
2
解决办法
2万
查看次数

在子例程中使用Perl变量初始化错误

所以我有一个情况,我有一个带有两个命名参数的函数,但如果两个都使用,函数需要死.我不确定这是否是一个错误,或者是否存在内在的东西,我不了解Perl变量.

这是简化的代码:

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

foreach my $number (1..5)
{
    fooBar(foo => $number);
}

sub fooBar 
{
    my %args = (
        foo => undef,
        bar => undef,
        @_
    );

    my $foo = $args{foo} if defined $args{foo};
    my @bar = @{$args{bar}} if defined $args{bar};
    print Dumper(\@bar);

    if (defined $foo)
    {
        die('fooBar() received both a foo and a bar and didn\'t know which to use!') if @bar;
        push(@bar, $foo);
    }

    print Dumper(\@bar);
    return (\@bar);
}

# > $VAR1 …
Run Code Online (Sandbox Code Playgroud)

perl subroutine

2
推荐指数
1
解决办法
162
查看次数

有没有更清晰的方法来处理不在聚合函数或GROUP BY子句中的字段?

我经常遇到这样的查询:

SELECT
    a.Id,
    a.A,
    a.B,
    a.C,
    SUM(b.Foo) AS foo
FROM
    TableA AS a
    JOIN TableB AS b
        ON a.Id = b.TableAId
GROUP BY a.Id;
Run Code Online (Sandbox Code Playgroud)

在SQL Server(如果ONLY_FULL_GROUP_BY为true,则为MySQL )中,此查询也不好。一切都必须是a)聚合函数中的,或b)中的GROUP BY

我的问题是,这两种解决方案看起来都很糟糕并且具有误导性。如果您选择了一个随机的聚合函数,MAX()您将得到:

SELECT
    a.Id,
    MAX(a.A) AS A,
    MAX(a.B) AS B,
    MAX(a.C) AS C,
    SUM(b.Foo) AS foo
FROM
    TableA AS a
    JOIN TableB AS b
        ON a.Id = b.TableAId
GROUP BY a.Id;
Run Code Online (Sandbox Code Playgroud)

该查询看起来像我们关心a.Aa.B和的最大值a.C,并且混淆了最大值没有意义的事实。

GROUP BY 好一点:

SELECT
    a.Id,
    a.A,
    a.B,
    a.C,
    SUM(b.Foo) …
Run Code Online (Sandbox Code Playgroud)

mysql sql sql-server aggregation

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