Tuo*_*nen 0 sql oracle oracle12c
我想要一个像这样的查询(这不起作用!)
select * from foo where rownum < 10 having distinct bar
Run Code Online (Sandbox Code Playgroud)
含义我想从列栏中的十个随机行中选择具有不同值的所有列.如何在Oracle中执行此操作?
这是一个例子.我有以下数据
| item | rate |
-------------------
| a | 50 |
| a | 12 |
| a | 26 |
| b | 12 |
| b | 15 |
| b | 45 |
| b | 10 |
| c | 5 |
| c | 15 |
Run Code Online (Sandbox Code Playgroud)
结果将是例如
| item no | rate |
------------------
| a | 12 | --from (26 , 12 , 50)
| b | 45 | --from (12 ,15 , 45 , 10)
| c | 5 | --from (5 , 15)
Run Code Online (Sandbox Code Playgroud)
总是有不同的项目没有
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;
Run Code Online (Sandbox Code Playgroud)
查询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.
Run Code Online (Sandbox Code Playgroud)
结果:
| ITEM | RATE |
|------|------|
| A | 0 |
| K | 2 |
| G | 4 |
| C | 1 |
| E | 0 |
| H | 0 |
| F | 2 |
| D | 3 |
| L | 4 |
| I | 1 |
Run Code Online (Sandbox Code Playgroud)