我有一张桌子。字段之一是类别(由枚举表示)。有些类别的商品为零。
所以我这样做:
select category, count(*) as total from items group by category;
+------------+-------+
| category | total |
+------------+-------+
| one | 6675 |
+------------+-------+
Run Code Online (Sandbox Code Playgroud)
我想生成一个这样的表(其中两个是另一个可能的枚举值):
+------------+-------+
| category | total |
+------------+-------+
| one | 6675 |
+------------+-------+
| two | 0 |
+------------+-------+
Run Code Online (Sandbox Code Playgroud)
如何使用mysql SQL查询执行此操作?
我有一个80000行数据库,结果编号在130000000和168000000之间,结果使用字段pid配对。我需要将行的状态从“ G”更改为“ X”,结果对之间的差值为4300000。
我想出了下面的查询,该查询可以运行,但是速度很慢,可以提高速度吗?
UPDATE table1 SET status = 'X'
WHERE id IN (
SELECT id FROM (
SELECT a.id AS id FROM table1 a, table1 b
WHERE a.result = b.result + 4300000
AND a.pid = b.pid
AND a.result between 130000000 and 168000000
AND a.status = 'G'
) AS c
);
Run Code Online (Sandbox Code Playgroud)
索引是:
table1 0 PRIMARY 1 id A 80233 NULL NULL BTREE
table1 1 id 1 id A 80233 NULL NULL BTREE
table1 1 id 2 result A 80233 NULL …Run Code Online (Sandbox Code Playgroud) 我有一个专用的 32 GB RAM Centos 7 服务器。我对 /etc/my.cnf 的设置了解非常有限。我在备份过程中遇到“未知变量 'key_buffer_size=256M'”,结果系统创建了零大小的文件。
mysqldump:未知变量 'key_buffer_size=256M' 数据库备份:bor --> bor.sql 构建文件列表 ... 完成 bor.sql
发送 105 字节 接收 46 字节 302.00 字节/秒 总大小为 0 加速为 0.00
我不明白 key_buffer_size 有什么问题!
这是我的“my.cnf”的内容:
!includedir /etc/my.cnf.d
key_buffer_size = 256M
query_cache_size = 128M
tmp_table_size = 128M
innodb_buffer_pool_size = 6500M
innodb_additional_mem_pool_size = 32M
innodb_log_buffer_size = 8M
max_connections = 250
sort_buffer_size = 8M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
join_buffer_size = 8M
binlog_cache_size = 1M
Run Code Online (Sandbox Code Playgroud) MariaDB版本:版本:10.0.38-MariaDB-0 + deb8u1
我有一张表,其中每2分钟报告一次设备状态(开/关),其时间戳记为unix时间。
select * from devices_stats
where device_id = 'LivingLight'
AND timestamp BETWEEN 1570080242 AND 1570084922;
+-------+-------------+--------+------------+-------------+
| id | device_id | status | timestamp | device_iddr |
+-------+-------------+--------+------------+-------------+
| 16416 | LivingLight | OFF | 1570080242 | 1 |
| 16427 | LivingLight | OFF | 1570080363 | 1 |
| 16438 | LivingLight | OFF | 1570080483 | 1 |
| 16449 | LivingLight | OFF | 1570080602 | 1 |
| 16460 | LivingLight …Run Code Online (Sandbox Code Playgroud) 我有两个recipes_sa带列的表:
recipes_id recipes_name recipes_chef
---------- ------------ ------------
Run Code Online (Sandbox Code Playgroud)
并chefs_sa带有列:
chefs_id chefs_name
-------- ----------
Run Code Online (Sandbox Code Playgroud)
我想获得有限数量的食谱,其中包含他们的厨师详细信息,使用INNER JOIN和LIMIT
我做了以下功能:
function getLimitJoinData($data, $tbls, $ids, $abr, $type, $limit) {
$dataToSelect = implode($data, ',');
$q = "SELECT $dataToSelect";
$q.= " FROM (SELECT * FROM $tbls[0] LIMIT $limit) $abr";
for ($i=1; $i < count($tbls); $i++) {
$q .= " ".$type." JOIN ". $tbls[$i] ." ON " . $abr.'.recipes_chef' .' = '. $ids[$i-1][0];
}
}
Run Code Online (Sandbox Code Playgroud)
查询是这样的
SELECT chefs_sa.chefs_name,
recipes_sa.recipes_name
FROM (SELECT * …Run Code Online (Sandbox Code Playgroud) 我在 MySQL 中运行,我有一个表输出作为目的地(a,b,c),如下所示
columnstart columnend
a b
a c
b a
b b
b c
c a
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试获取未在下面的输出中列出的目的地
columnstart columnend
a a
c b
c c
Run Code Online (Sandbox Code Playgroud)
有什么方法可以实现这一目标吗?提前致谢。
我希望SELECT 1小时平均1分钟数据.
EX)
id | time | value
1 | 2018-05-16 13:45:59 | 3
1 | 2018-05-16 14:25:39 | 4
1 | 2018-05-16 14:55:39 | 6
1 | 2018-05-16 15:35:19 | 1
Run Code Online (Sandbox Code Playgroud)
我想看
id | time | value
1 | 2018-05-16 13:00:00 | 3
1 | 2018-05-16 14:00:00 | 5
1 | 2018-05-16 15:00:00 | 1
Run Code Online (Sandbox Code Playgroud)
我该怎么办?