iT邦幫忙

0

SQL語法疑問?

有一個商品資料表如下(編號為字串型態,價格為數字型態),請設計SQL指令取得兩種不同商品組合其總價格大於300的組合資料,例如A商品+B商品總價格為380,因此取得為“A 220 B 160 380”的組合資料
https://ithelp.ithome.com.tw/upload/images/20210418/201367848nC16wodUU.png

想請教大家這一道題目SQL該怎麼寫?我怎麼想都想不出來


1 則留言

2
一級屠豬士
iT邦大師 1 級 ‧ 2021-04-18 23:28:12
create table it0418 (
  pno char(1) not null
, price int not null
);

insert into it0418 values
('A', 220), ('B', 160), ('C', 155),
('D', 245), ('E', 120), ('F', 215),
('G', 100);

select a.*
     , b.*
  from it0418 a
  join it0418 b
    on a.pno < b.pno
 order by 1,3;
 
select a.*
     , b.*
     , a.price + b.price
  from it0418 a
  join it0418 b
    on a.pno < b.pno
 order by 1,3;

demo

看更多先前的回應...收起先前的回應...
m10423010 iT邦新手 5 級 ‧ 2021-04-19 00:49:02 檢舉

首先謝謝您的答覆,我有3個問題想請教您
1.為何要自己join自己?
2.為何設這個條件a.pno < b.pno?
3.您把pno設定字元型態,a.pno < b.pno-->字元可以比較大小嗎?

先回答 3, 字元可以比較大小的,一般是用內碼來比.
然後 1, 解這個問題,很直觀的就是需要 兩組, 那當然是原本的
table 就是兩個集合,來做 join.
再來 2, join 並不全是 = , 只要是 運算式 為 true, 該組合就會留下來.你這問題是 不相同的, 也可以寫成不等於 (!= 或是 <>)
但是這樣子組數會變多, 例如 (A,B) (B,A) 這樣排列不同,但是組合相同.所以就用 3 的特性, 使用 < 或是 > 方式 取得較少組數.
精簡一些.
另外,以後別在發文區發問. 這樣子比較容易被漏掉.

m10423010 iT邦新手 5 級 ‧ 2021-04-22 21:07:53 檢舉

謝謝您的答覆,我第一次使用it邦幫忙,請問那要在哪發問比較不會漏掉?

m10423010 iT邦新手 5 級 ‧ 2021-04-22 21:39:18 檢舉

您好,我最近在練SQL考題,今天練到一題考古題,結果我還是想不出來,不知道您可以告訴我這題該怎麼解嗎?
https://ithelp.ithome.com.tw/upload/images/20210422/20136784a306fKqpL1.png
https://ithelp.ithome.com.tw/questions/10203083

我要留言

立即登入留言