MySQL 5.7.x实现sum() over(partition by)
时间: 2023-12-06 10:02:01 浏览: 225
MySQL 5.7.x中可以使用变量来模拟实现`sum() over(partition by)`的功能。
以下是一个示例查询:
```
SELECT id, name, score,
@sum := IF(@prev = name, @sum + score, score) AS total_score,
@prev := name
FROM scores
ORDER BY name;
```
这个查询会将`scores`表中的数据按照`name`字段进行分组,并且对每个分组内的`score`字段求和,同时在结果中显示每个记录的总分数。
查询中使用了两个变量`@sum`和`@prev`,它们的初始值均为NULL。在查询中,使用了IF函数判断当前记录的`name`字段是否与前一条记录相同,如果相同,则将当前记录的`score`字段加上之前的总分数;如果不同,则将当前记录的`score`字段作为新的总分数。最后,将当前记录的`name`字段赋值给`@prev`变量,以备下一条记录使用。
需要注意的是,该方法只适用于单个分组内的求和,如果需要对多个分组进行求和,则需要进行一些修改。
相关问题
MySQL 5.7.x实现sum() over(partition by v1,v2)
在MySQL 5.7.x中,可以使用子查询和变量来实现类似于`sum() over(partition by v1,v2)`的功能。
以下是实现的步骤:
1. 首先,创建一个变量`@sum`并初始化为0。
```sql
SET @sum := 0;
```
2. 然后,使用子查询计算每个分区的总和,并将结果存储在变量中。
```sql
SELECT v1, v2, @sum := @sum + amount as total
FROM your_table
ORDER BY v1, v2;
```
在上述查询中,`amount`是需要计算总和的列名,`your_table`是数据表名,`v1`和`v2`是需要分区的列名。
3. 最后,将查询结果按照分区列和总和列进行排序,以便让每个分区的总和排在前面。
```sql
SELECT v1, v2, total
FROM (
SELECT v1, v2, @sum := @sum + amount as total
FROM your_table
ORDER BY v1, v2
) t
ORDER BY v1, v2, total;
```
这样就可以实现类似于`sum() over(partition by v1,v2)`的功能了。
debian10编译安装mysql5.7.35
编译安装MySQL 5.7.35在Debian 10上需要以下步骤:
1. 安装编译MySQL所需的依赖项:
```
sudo apt update
sudo apt install build-essential cmake libncurses5-dev libssl-dev libaio1
```
2. 下载MySQL 5.7.35源代码:
```
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.35.tar.gz
tar -zxvf mysql-5.7.35.tar.gz
cd mysql-5.7.35
```
3. 配置和编译MySQL:
```
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_SSL=yes
make
sudo make install
```
4. 创建MySQL用户和组:
```
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
```
5. 初始化MySQL数据库:
```
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
```
6. 启动MySQL服务:
```
sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
sudo chmod +x /etc/init.d/mysql
sudo service mysql start
```
现在,你已经成功编译安装了MySQL 5.7.35。你可以使用`mysql -V`命令来验证安装的版本。
阅读全文