問題是這樣: 現在想實作的是從下邊一堆資料中,隨機抽取4個種類:A,B,C,D 讓最后val的總值為960
資料表A中有兩列
type, val
D 11
C 9
D 30
D 20
C 21
C 14
B 17
A 16
B 9
B 19
D 13
A 8
B 9
B 30
A 12
A 6
B 30
B 13
C 14
B 16
B 5
C 30
B 30
D 15
B 30
B 30
B 9
B 13
D 57
D 15
D 23
B 10
D 13
B 17
B 15
A 15
C 16
D 13
D 19
B 5
C 8
B 17
A 6
B 5
D 12
B 17
C 11
B 17
A 24
B 11
B 19
A 9
D 15
C 28
D 32
D 10
C 15
A 12
D 19
B 30
B 16
D 13
B 11
D 30
uj5u.com熱心網友回復:
隨機抽取4個種類:A,B,C,D 讓最后val的總值為960——沒看懂,A,B,C,D4個種類,每一個種類至少一個,總的數量不定,但總合是960?uj5u.com熱心網友回復:
意思就是4個種類,隨機抽,不論怎么抽,最后總和得960.有可能A,B,C,D其中有一個或兩個為空
uj5u.com熱心網友回復:
不理解~~最后的結果是什么?
A、B、C、D,或者是它們的任意組合? 但是要求結果是960?
按照A、B、C、D分別匯總
select type, sum(val) from table A group by type;
然后,看每個型別的值如何組合成960?
uj5u.com熱心網友回復:
你這個題目,條件太少了,要求條件也太少了:
with s
as
(
-- 類別 該類別值【抽1次】匯總 該類別值【抽2次】匯總 該類別值【抽3次】匯總
select type, sum(distinct val) as s1, sum(distinct val) * 2 as s2, sum(distinct val) * 3 as s3
from t
group by type
order by type
)
--- 所有的類別相加 【抽1次】【抽3次】【抽3次】
select 'SUMV' as type,sum(s1), sum(s2),sum(s3)
from s
union all
select *
from s
order by 1
uj5u.com熱心網友回復:
這是演算法問題,不是ORACLE能夠輕易解決的uj5u.com熱心網友回復:
也就是說,你那個960,必須得允許某個類別抽 2次+ 才行。
如果是那樣,你這個其實不適合用sql實作,自己寫個程式,從val池子中選擇,保證存在 {2、3、4}種型別的值,抽多少次不管(當然你也可以限制最多次數,比方5次)得到960!
uj5u.com熱心網友回復:
這個題目是細思極恐類的,類似于智能推導,像下象棋!!!
uj5u.com熱心網友回復:
寫個存盤程序在里面慢慢去判斷?轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/62145.html
標籤:基礎和管理
上一篇:這道題怎么做呀?
