簡體   English   中英

MySQL:使用分組依據選擇並除以計數

[英]MySQL: select and divide by count using group by

這是我表的數據集

ID  |groupID|   Start   | End   | SegStart  | SegEnd    | something
-------------------------------------------------------------------
1   |   1   |   0.234   | 0.345 |   0.345   |   0.677   | 0
2   |   1   |   0.234   | 0.345 |   0.346   |   0.678   | 0
3   |   1   |   0.234   | 0.345 |   0.347   |   0.679   | 0
4   |   1   |   0.234   | 0.345 |   0.348   |   0.680   | 1
5   |   2   |   0.345   | 0.567 |   0.568   |   0.570   | 0
6   |   2   |   0.345   | 0.567 |   0.569   |   0.571   | 1
7   |   3   |   0.567   | 0.678 |   0.679   |   0.681   | 0
8   |   3   |   0.567   | 0.678 |   0.680   |   0.682   | 0
9   |   3   |   0.567   | 0.678 |   0.681   |   0.683   | 1

我想從Start / End列以及SegStart / SegEnd列中計算出一個值,該值= 1,然后將該值除以組中的項目數(組1有4個項目,組2有2個項目,第3組有3個,依此類推)

我已經嘗試過此查詢,但它給我錯誤“子查詢返回多於1行”

select (((End - Start) - (SegEnd - SegStart)) / 
  (select count(*) as NumSeg from table group by groupID)) as NewValue 
from table where something = "1"; 

我想要每個組的新值的列表,像這樣(值是虛數的):

groupID |   NewValue
--------------------
1       |   0.102
2       |   0.110   
3       |   0.036

您可以嘗試以下方法:

CREATE TABLE mytable(
   ID        INTEGER  NOT NULL PRIMARY KEY 
  ,groupID   INTEGER  NOT NULL
  ,Start     NUMERIC(11,3) NOT NULL
  ,End       NUMERIC(7,3) NOT NULL
  ,SegStart  NUMERIC(11,3) NOT NULL
  ,SegEnd    NUMERIC(11,3) NOT NULL
  ,something BIT  NOT NULL
);
INSERT INTO mytable(ID,groupID,Start,End,SegStart,SegEnd,something) VALUES (1,1,0.234,0.345,0.345,0.677,0);
INSERT INTO mytable(ID,groupID,Start,End,SegStart,SegEnd,something) VALUES (2,1,0.234,0.345,0.346,0.678,0);
INSERT INTO mytable(ID,groupID,Start,End,SegStart,SegEnd,something) VALUES (3,1,0.234,0.345,0.347,0.679,0);
INSERT INTO mytable(ID,groupID,Start,End,SegStart,SegEnd,something) VALUES (4,1,0.234,0.345,0.348,0.680,1);
INSERT INTO mytable(ID,groupID,Start,End,SegStart,SegEnd,something) VALUES (5,2,0.345,0.567,0.568,0.570,0);
INSERT INTO mytable(ID,groupID,Start,End,SegStart,SegEnd,something) VALUES (6,2,0.345,0.567,0.569,0.571,1);
INSERT INTO mytable(ID,groupID,Start,End,SegStart,SegEnd,something) VALUES (7,3,0.567,0.678,0.679,0.681,0);
INSERT INTO mytable(ID,groupID,Start,End,SegStart,SegEnd,something) VALUES (8,3,0.567,0.678,0.680,0.682,0);
INSERT INTO mytable(ID,groupID,Start,End,SegStart,SegEnd,something) VALUES (9,3,0.567,0.678,0.681,0.683,1);


select A.GROUPID, ((End - Start) - (SegEnd - SegStart)) / B.NumSeg AS V1
from mytable A
INNER JOIN  (select GROUPID, count(*) as NumSeg from mytable group by GROUPID) B ON A.GROUPID = B.GROUPID
where something = "1"; 

輸出:

    GROUPID V1
1   1   -0,0552500
2   2   0,1100000
3   3   0,0363333

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM