小编Gab*_*ana的帖子

SQL:按计数(*)分组为总表行数的pct

我花了很多时间搜索这个,如果重复,请告诉我.

我需要编写一个分组查询,该查询返回记录类别以及每种类别的计数.像这样的东西:

select categorynum, count(*) from tbl group by categorynum;
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.现在我需要的是确定每个类别的总数占总数的百分比.我想出的最好的是这个,我不喜欢,感觉很脏:

select categorynum, count(*), count(*)/(select count(*) from tbl) from tbl group by categorynum;
Run Code Online (Sandbox Code Playgroud)

它有效,但是我真的唠叨这样做.我使用的数据库是Postgres语法兼容的,并且count(*)在一个表上非常快,所以count(*)在桌子上做一个没有巨大的速度,尽管我想尽可能写出更好的SQL.

那么有更好的方法来写这个吗?这是我经常遇到的情况,所以我想正确地编写我的查询.

sql postgresql

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

如何在memsql安装后更改root密码?

我已经安装了MemSQL社区版(单主机群集),一切运行良好.我需要允许远程访问数据库,但MemSQL在没有密码的情况下安装用户root.如果我打开防火墙上的3306端口,memSQL很乐意允许任何人以root身份登录而无需密码.

我试图通过更改root用户密码

mysqladmin -u root -h 127.0.0.1  password abc123
Run Code Online (Sandbox Code Playgroud)

但我得到的错误

mysqladmin: unable to change password; error: 'Unknown system variable 'password''
Run Code Online (Sandbox Code Playgroud)

我也尝试在以root身份连接后进行更改.所有这些都失败了:

mysql> SET PASSWORD = 'abc123';
ERROR 1193 (HY000): Unknown system variable 'PASSWORD'

mysql> SET PASSWORD = PASSWORD('abc123');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('abc123')' at line 1

mysql> SET PASSWORD = OLD_PASSWORD('abc123');
ERROR 1064 (42000): You have …
Run Code Online (Sandbox Code Playgroud)

singlestore

4
推荐指数
2
解决办法
2326
查看次数

有没有办法在候选人列表中测试枚举值?(JAVA)

这是一个简化的例子.我有这个枚举声明如下:

public enum ELogLevel {
    None,
    Debug,
    Info,
    Error
}
Run Code Online (Sandbox Code Playgroud)

我在另一个类中有这个代码:

if ((CLog._logLevel == ELogLevel.Info) || (CLog._logLevel == ELogLevel.Debug) || (CLog._logLevel == ELogLevel.Error)) {
    System.out.println(formatMessage(message));
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有办法缩短测试时间.理想情况下,我想要一些调整(这是从Pascal/Delphi借来的):

if (CLog._logLevel in [ELogLevel.Info, ELogLevel.Debug, ELogLevel.Error])
Run Code Online (Sandbox Code Playgroud)

而不是长长的比较列表.Java中有这样的东西,或者可能是实现它的方法吗?我正在使用一个简单的例子,我的目的是找出是否有一个模式,所以我可以使用更多元素的枚举值列表进行这些类型的测试.

编辑:看起来EnumSet是最接近我想要的东西.Naïve实现它的方式是通过以下方式:

if (EnumSet.of(ELogLevel.Info, ELogLevel.Debug, ELogLevel.Error).contains(CLog._logLevel))
Run Code Online (Sandbox Code Playgroud)

但是在基准测试中,这比long if/then语句要慢两个数量级,我猜是因为EnumSet每次运行都会被实例化.这只是经常运行的代码的一个问题,即使这样,这也是一个非常小的问题,因为超过100M的迭代我们在谈论我的盒子上的7毫秒对450毫秒; 两种方式都是非常短的时间.

对于经常运行的代码,我选择的是在静态变量中预先实例化EnumSet,并在循环中使用该实例,这将运行时间缩减到比100M迭代更可口的9ms.

所以看起来我们有一个胜利者!谢谢你们的快速回复.

java

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

标签 统计

java ×1

postgresql ×1

singlestore ×1

sql ×1