小编Dan*_*aca的帖子

高效使用SQL GROUP BY,SUM,COUNT

我有一张产品销售表,可能如下所示:

product   | amount   | ptype    | pdate      
p1        | 1.00     | sale     | 01/01
p1        | 2.00     | base     | 01/02
p2        | 1.50     | sale     | 02/03
p3        | 5.25     | base     | 10/10
Run Code Online (Sandbox Code Playgroud)

我想构建一个表格,每行显示一个产品,金额总和,如果产品是唯一的,则显示其他类型显示类型为"VAR",如果产品是唯一的则显示日期,否则显示日期为NULL.这样结果如下:

product   | total    | ptype    | pdate      
p1        | 3.00     | VAR      | (NULL)
p2        | 1.50     | sale     | 02/03
p3        | 5.25     | base     | 10/10
Run Code Online (Sandbox Code Playgroud)

我通过以下方式完成了我需要的结果:

SELECT DISTINCT product
,(SELECT SUM(amount) FROM T as b GROUP BY b.product HAVING a.product …
Run Code Online (Sandbox Code Playgroud)

sql performance group-by sum count

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

选择每个组的第一行,使用ORDER BY多个列

我有一个表T的列x,y,a,b使得

SELECT x,y,a,b FROM T
ORDER BY x,y,a,b
Run Code Online (Sandbox Code Playgroud)

给我下表

 x    | y    | a    | b
 x1   | y1   | a1   | b1
 x1   | y1   | a1   | b2
 x1   | y1   | a2   | b1
 x1   | y2   | a1   | b1
 x1   | y2   | a1   | b2
 x1   | y2   | a2   | b1
Run Code Online (Sandbox Code Playgroud)

我如何获得每个x,y组的第一行?也就是说,我如何获得下表

 x    | y    | a    | b
 x1   | y1   | …
Run Code Online (Sandbox Code Playgroud)

sql performance sybase group-by sql-order-by

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

使用SQL进行表的"转置"

我不知道这个操作是否有名称,但它类似于线性代数中的转置.

有没有办法转1表n表如T1

c_1|c_2|c_3|...|a_n
-------------------
1  |2  |3  |...|n
Run Code Online (Sandbox Code Playgroud)

进入一个2表,如下所示

key|val
-------
c_1|1
b_2|2
c_3|3
.  |.
.  |.
a_n|n
Run Code Online (Sandbox Code Playgroud)

我假设T1中的每一列c_i都不太可能被识别出来.

sql sybase transpose unpivot linear-algebra

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