前幾天去筆試,考資料庫,遇到這樣的一個題目:一張記錄往期開獎記錄的表格CP,里面有八個欄位,第一個欄位是開獎的期數,剩下的七個欄位是代表開獎的七個號碼,如圖,問題就是①寫一個sql陳述句查詢出表中開獎記錄的出現次數最多的號碼 ②寫一個sql陳述句查詢出表中的開獎記錄中沒有出現過的數字,沒有實作的思路,沒有寫出來,有沒有大神幫看一下怎么實作這兩個SQL陳述句啊
uj5u.com熱心網友回復:
上面兩個拿手機回的是空的希望對你有啟發
自己設定了一個三列的表實驗了一下
select * from
(
select a,count(a) zs
from
(
select a1 a from aa
union all
select a2 a from aa
union all
select a3 a from aa
)
group by a order by zs desc
)
where rownum<2
uj5u.com熱心網友回復:
1,出現最多的數字,就把所有列的數字查詢出來,然后比較count數目,取出最大count數目的數字就行了。2,會出現的數字是不是有規則?不然那豈不是有無限多的數字?有規則的話就是查詢出所有這些數字,然后不存在于規則內的數字就行了。
uj5u.com熱心網友回復:
你提供的圖太小,數字太多。你列下表欄位,提供幾組測驗資料,以及說明要達到的效果。這樣才方便些SQL陳述句。
uj5u.com熱心網友回復:
這樣才方便寫SQL陳述句。uj5u.com熱心網友回復:
行轉列就簡單了,雙色球是 紅球1-33, 籃球1-16, 不區分紅藍一起統計的話
第一題
WITH TMP AS
(SELECT DATE '2017-10-10' - LEVEL AS T_DATE, TRUNC(DBMS_RANDOM.VALUE(1, 34)) N1,
TRUNC(DBMS_RANDOM.VALUE(1, 34)) N2, TRUNC(DBMS_RANDOM.VALUE(1, 34)) N3,
TRUNC(DBMS_RANDOM.VALUE(1, 34)) N4, TRUNC(DBMS_RANDOM.VALUE(1, 34)) N5,
TRUNC(DBMS_RANDOM.VALUE(1, 34)) N6, TRUNC(DBMS_RANDOM.VALUE(1, 17)) N7
FROM DUAL
CONNECT BY LEVEL <= 20)
SELECT V, C
FROM (SELECT V, COUNT(1) C
FROM (SELECT V
FROM TMP UNPIVOT(V FOR COL IN(N1, N2, N3, N4, N5, N6, N7)))
GROUP BY V
ORDER BY C DESC)
WHERE ROWNUM = 1
第二題
WITH TMP AS
(SELECT DATE '2017-10-10' - LEVEL AS T_DATE, TRUNC(DBMS_RANDOM.VALUE(1, 34)) N1,
TRUNC(DBMS_RANDOM.VALUE(1, 34)) N2, TRUNC(DBMS_RANDOM.VALUE(1, 34)) N3,
TRUNC(DBMS_RANDOM.VALUE(1, 34)) N4, TRUNC(DBMS_RANDOM.VALUE(1, 34)) N5,
TRUNC(DBMS_RANDOM.VALUE(1, 34)) N6, TRUNC(DBMS_RANDOM.VALUE(1, 17)) N7
FROM DUAL
CONNECT BY LEVEL <= 20)
SELECT LEVEL AS L
FROM DUAL
CONNECT BY LEVEL <= 33
MINUS
SELECT DISTINCT V
FROM (SELECT V
FROM TMP UNPIVOT(V FOR COL IN(N1, N2, N3, N4, N5, N6, N7)))
uj5u.com熱心網友回復:
樓上第二個SQL可以再優化下:
WITH TMP AS
(SELECT DATE '2017-10-10' - LEVEL AS T_DATE, TRUNC(DBMS_RANDOM.VALUE(1, 34)) N1,
TRUNC(DBMS_RANDOM.VALUE(1, 34)) N2, TRUNC(DBMS_RANDOM.VALUE(1, 34)) N3,
TRUNC(DBMS_RANDOM.VALUE(1, 34)) N4, TRUNC(DBMS_RANDOM.VALUE(1, 34)) N5,
TRUNC(DBMS_RANDOM.VALUE(1, 34)) N6, TRUNC(DBMS_RANDOM.VALUE(1, 17)) N7
FROM DUAL
CONNECT BY LEVEL <= 20)
SELECT LEVEL AS L FROM DUAL CONNECT BY LEVEL <= 33
MINUS
SELECT V FROM TMP UNPIVOT(V FOR COL IN(N1, N2, N3, N4, N5, N6, N7))
uj5u.com熱心網友回復:
有人看不出來什么意思,可能我描述的也有問題,這就是買彩票的例子啊:一張表用于存盤開獎的記錄資訊的,彩票開獎有期數和對應的七個號碼,然后這個表就是設計成包含八個欄位,第一個欄位存盤開獎的期數,剩下的七個欄位分別記錄那七個數字,數字的包含范圍是1-36;要求1:寫一個sql陳述句,在給提供的開獎期數中,查出開獎記錄中出現次數最多的數字;
要求2:寫一個sql陳述句,在給提供的開獎期數中,查出開獎記錄中從來就沒有出現過的數字
上面的幾個大神寫了,有更簡單的方式嗎
uj5u.com熱心網友回復:
上面一句話就寫出來了,還要多簡單... with子句是構建測驗資料的
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/81512.html
標籤:開發
