簡體   English   中英

Oracle SQL,如何選擇*具有不同的列

[英]Oracle SQL, how to select * having distinct columns

我想查詢類似這樣的東西(這不起作用!)

select * from foo where rownum < 10 having distinct bar

意思是我想從十個隨機行中選擇所有列,列中的值不同 在Oracle中如何做到這一點?

這是一個例子。 我有以下數據

| item    | rate |
-------------------
| a       | 50   |
| a       | 12   |
| a       | 26   |
| b       | 12   |
| b       | 15   |
| b       | 45   |
| b       | 10   |
| c       | 5    |
| c       | 15   |

結果將是例如

| item no | rate |
------------------
| a       | 12 |  --from (26 , 12 , 50)
| b       | 45 | --from (12 ,15 , 45 , 10)
| c       | 5  | --from (5 , 15)

擁有不同的商品編號

SQL小提琴

Oracle 11g R2架構設置

生成具有12項的表格A - L各有率0 - 4

CREATE TABLE items ( item, rate ) AS
SELECT CHR( 64 + CEIL( LEVEL / 5 ) ),
       MOD( LEVEL - 1, 5 )
FROM   DUAL
CONNECT BY LEVEL <= 60;

查詢1

SELECT item,
       rate
FROM   (
  SELECT i.*,
         -- Give the rates for each item a unique index assigned in a random order
         ROW_NUMBER() OVER ( PARTITION BY item ORDER BY DBMS_RANDOM.VALUE ) AS rn
  FROM   items i
  ORDER BY DBMS_RANDOM.VALUE -- Order all the rows randomly
)
WHERE  rn = 1                -- Only get the first row for each item
AND    ROWNUM <= 10          -- Only get the first 10 items.

結果

| ITEM | RATE |
|------|------|
|    A |    0 |
|    K |    2 |
|    G |    4 |
|    C |    1 |
|    E |    0 |
|    H |    0 |
|    F |    2 |
|    D |    3 |
|    L |    4 |
|    I |    1 |

我提到表創建和查詢前10行; (參考SqlFiddle)

create table foo(item varchar(20), rate int);

insert into foo values('a',50);
insert into foo values('a',12);
insert into foo values('a',26);
insert into foo values('b',12);
insert into foo values('b',15);
insert into foo values('b',45);
insert into foo values('b',10);
insert into foo values('c',5);
insert into foo values('c',15);

-這里首先獲取不同的項目,然后按行號過濾明智的行:

 select item, rate from (
      select item, rate, ROW_NUMBER() over(PARTITION BY item ORDER BY rate desc) 
     row_num  from foo 
 )  where row_num=1;

暫無
暫無

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

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