如何在SQL表里把一列中某一列作为变量然后相同值累加排序

时间:2021-11-12 10:31:52
之前

作者   作品     点击PV 
A      A作品名1  15
B      B作品名1  12
B      B作品名2  11
C      C作品名1  10
C      C作品名2  9
A      A作品名2  1

之后

作者   作品     点击PV   作者作品PV和   作者作品数
B      B作品名1  12           23            2
B      B作品名2  11           23            2
C      C作品名1  10           19            2
C      C作品名2  9            19            2
A      A作品名1  15           16            2
A      A作品名2  1            16            2

把相同作者的“点击PV”进行累加求和生成额外一列“作者作品PV和”,然后按其排序

9 个解决方案

#1



create table ol
(作者 char(1), 作品 varchar(10), 点击PV int)

insert into ol  
select 'A', 'A作品名1', 15 union all
select 'B', 'B作品名1', 12 union all
select 'B', 'B作品名2', 11 union all
select 'C', 'C作品名1', 10 union all
select 'C', 'C作品名2', 9 union all
select 'A', 'A作品名2', 1


select a.*,b.作者作品PV和,b.作者作品数 
from ol a
inner join
(select 作者,sum(点击PV) '作者作品PV和',count(1) '作者作品数'
from ol group by 作者) b on a.作者=b.作者
order by b.作者作品PV和 desc,b.作者作品数 desc

/*
作者   作品         点击PV        作者作品PV和     作者作品数
---- ---------- ----------- ----------- -----------
B    B作品名1      12          23          2
B    B作品名2      11          23          2
C    C作品名1      10          19          2
C    C作品名2      9           19          2
A    A作品名1      15          16          2
A    A作品名2      1           16          2

(6 row(s) affected)
*/

#2


if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([作者] varchar(1),[作品] varchar(8),[点击PV] int)
insert [tb]
select 'A','A作品名1',15 union all
select 'B','B作品名1',12 union all
select 'B','B作品名2',11 union all
select 'C','C作品名1',10 union all
select 'C','C作品名2',9 union all
select 'A','A作品名2',1
go

select a.*,b.作者作品PV和,b.作者作品数
from tb a
join 
(
  select 作者,sum(点击PV) as 作者作品PV和,count(1) as 作者作品数
  from tb
  group by 作者
) b
on a.作者=b.作者
order by b.作者作品PV和 desc

/**
作者   作品       点击PV        作者作品PV和     作者作品数
---- -------- ----------- ----------- -----------
B    B作品名1    12          23          2
B    B作品名2    11          23          2
C    C作品名1    10          19          2
C    C作品名2    9           19          2
A    A作品名1    15          16          2
A    A作品名2    1           16          2

(6 行受影响)
**/

#3


我已有table a,是存在本机的.txt 文件: $PATH/author.txt
语句该如何写?

#4



/*
[创建]:
  D:\author.txt

[内容]:
  作者 作品 点击PV  
  A A作品名1 15
  B B作品名1 12
  B B作品名2 11
  C C作品名1 10
  C C作品名2 9
  A A作品名2 1
*/

create table ol
(作者 char(1), 作品 varchar(10), 点击PV int)

bulk insert ol
from 'D:\author.txt'
with  
( FIELDTERMINATOR =' ',
  ROWTERMINATOR ='\n',
  KILOBYTES_PER_BATCH=5000,
  firstrow=2
)

select * from ol

/*
作者   作品         点击PV
---- ---------- -----------
A    A作品名1      15
B    B作品名1      12
B    B作品名2      11
C    C作品名1      10
C    C作品名2      9
A    A作品名2      1

(6 row(s) affected)
*/

select a.*,b.作者作品PV和,b.作者作品数 
from ol a
inner join
(select 作者,sum(点击PV) '作者作品PV和',count(1) '作者作品数'
from ol group by 作者) b on a.作者=b.作者
order by b.作者作品PV和 desc,b.作者作品数 desc

/*
作者   作品         点击PV      作者作品PV和   作者作品数
---- ---------- ----------- ----------- -----------
B    B作品名1      12          23          2
B    B作品名2      11          23          2
C    C作品名1      10          19          2
C    C作品名2      9           19          2
A    A作品名1      15          16          2
A    A作品名2      1           16          2

(6 row(s) affected)
*/

#5


如果“作者作品PV和”是18位的小数,比如0.000791571974605011
我定义float 或 double 类型,都出现语法错误
*/
命令出错, 行: 2 列: 69
错误报告:
SQL 错误: ORA-00922: 选项缺失或无效
00922. 00000 -  "missing or invalid option"
*Cause:    
*Action:

是什么问题?

#6


ORA-00922: 选项缺失或无效
楼主是用Oracle?
如何在SQL表里把一列中某一列作为变量然后相同值累加排序

#7


嗯,有什么办法吗?跪谢

#8


NUMBER(17,18) 或 NUMBER(19,18) 也不行

#9


我用的sql developer,所以出现了ora-00922 的错误?

#1



create table ol
(作者 char(1), 作品 varchar(10), 点击PV int)

insert into ol  
select 'A', 'A作品名1', 15 union all
select 'B', 'B作品名1', 12 union all
select 'B', 'B作品名2', 11 union all
select 'C', 'C作品名1', 10 union all
select 'C', 'C作品名2', 9 union all
select 'A', 'A作品名2', 1


select a.*,b.作者作品PV和,b.作者作品数 
from ol a
inner join
(select 作者,sum(点击PV) '作者作品PV和',count(1) '作者作品数'
from ol group by 作者) b on a.作者=b.作者
order by b.作者作品PV和 desc,b.作者作品数 desc

/*
作者   作品         点击PV        作者作品PV和     作者作品数
---- ---------- ----------- ----------- -----------
B    B作品名1      12          23          2
B    B作品名2      11          23          2
C    C作品名1      10          19          2
C    C作品名2      9           19          2
A    A作品名1      15          16          2
A    A作品名2      1           16          2

(6 row(s) affected)
*/

#2


if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([作者] varchar(1),[作品] varchar(8),[点击PV] int)
insert [tb]
select 'A','A作品名1',15 union all
select 'B','B作品名1',12 union all
select 'B','B作品名2',11 union all
select 'C','C作品名1',10 union all
select 'C','C作品名2',9 union all
select 'A','A作品名2',1
go

select a.*,b.作者作品PV和,b.作者作品数
from tb a
join 
(
  select 作者,sum(点击PV) as 作者作品PV和,count(1) as 作者作品数
  from tb
  group by 作者
) b
on a.作者=b.作者
order by b.作者作品PV和 desc

/**
作者   作品       点击PV        作者作品PV和     作者作品数
---- -------- ----------- ----------- -----------
B    B作品名1    12          23          2
B    B作品名2    11          23          2
C    C作品名1    10          19          2
C    C作品名2    9           19          2
A    A作品名1    15          16          2
A    A作品名2    1           16          2

(6 行受影响)
**/

#3


我已有table a,是存在本机的.txt 文件: $PATH/author.txt
语句该如何写?

#4



/*
[创建]:
  D:\author.txt

[内容]:
  作者 作品 点击PV  
  A A作品名1 15
  B B作品名1 12
  B B作品名2 11
  C C作品名1 10
  C C作品名2 9
  A A作品名2 1
*/

create table ol
(作者 char(1), 作品 varchar(10), 点击PV int)

bulk insert ol
from 'D:\author.txt'
with  
( FIELDTERMINATOR =' ',
  ROWTERMINATOR ='\n',
  KILOBYTES_PER_BATCH=5000,
  firstrow=2
)

select * from ol

/*
作者   作品         点击PV
---- ---------- -----------
A    A作品名1      15
B    B作品名1      12
B    B作品名2      11
C    C作品名1      10
C    C作品名2      9
A    A作品名2      1

(6 row(s) affected)
*/

select a.*,b.作者作品PV和,b.作者作品数 
from ol a
inner join
(select 作者,sum(点击PV) '作者作品PV和',count(1) '作者作品数'
from ol group by 作者) b on a.作者=b.作者
order by b.作者作品PV和 desc,b.作者作品数 desc

/*
作者   作品         点击PV      作者作品PV和   作者作品数
---- ---------- ----------- ----------- -----------
B    B作品名1      12          23          2
B    B作品名2      11          23          2
C    C作品名1      10          19          2
C    C作品名2      9           19          2
A    A作品名1      15          16          2
A    A作品名2      1           16          2

(6 row(s) affected)
*/

#5


如果“作者作品PV和”是18位的小数,比如0.000791571974605011
我定义float 或 double 类型,都出现语法错误
*/
命令出错, 行: 2 列: 69
错误报告:
SQL 错误: ORA-00922: 选项缺失或无效
00922. 00000 -  "missing or invalid option"
*Cause:    
*Action:

是什么问题?

#6


ORA-00922: 选项缺失或无效
楼主是用Oracle?
如何在SQL表里把一列中某一列作为变量然后相同值累加排序

#7


嗯,有什么办法吗?跪谢

#8


NUMBER(17,18) 或 NUMBER(19,18) 也不行

#9


我用的sql developer,所以出现了ora-00922 的错误?