5

How can I request a random column (or as close to truly random as is possible) in pure SQL?

I want to select any one column randomly from a table.

I have searched lot regarding this on google.

Prikshit
  • 304
  • 2
  • 12

4 Answers4

1

Dependent on your DBMS the catalogue looks a bit different. For mysql you could get a random column like:

select column_name 
from information_schema.columns 
where table_schema = ? 
  and table_name = ? 
order by rand() limit 1;

and then incorporate that into your query. Other vendors may have a slightly different look of the catalogue, but the idea will be the same.

Why do you want to retrieve a random column?

Lennart - Slava Ukraini
  • 6,936
  • 1
  • 20
  • 32
1
USE [AdventureWorksDW2012]
GO

DECLARE @SQL VARCHAR(MAX)

SELECT  [name]
FROM    sys.columns C WHERE C.object_id = OBJECT_ID('DimProduct')
AND     C.column_id = (
SELECT  ((ABS(CHECKSUM(NEWID()))% COUNT(*)) + 1)
FROM    sys.columns C 
WHERE   C.object_id = OBJECT_ID('DimProduct'))

This may help you, It is done with SQL Server. Here you are randomly selecting a column of table [DimProduct]

Result1:

enter image description here

Result2:

enter image description here

Jithin Shaji
  • 5,893
  • 5
  • 25
  • 47
0

You can select a random record, but all columns must be referenced by name and not even position.

The only way you can force this is:

  1. Get list all column names
  2. Randomly select one column name
  3. Write the query using the selected column name

Simply there is no way to do it with pie SQL.

denisvm
  • 720
  • 3
  • 11
0

In Microsoft SQL, you can achieve this by ordering columns by randomized number (NEWID):

SELECT TOP 1 c.column_name 
FROM   information_schema.columns c 
WHERE  table_name = 'your_table_name' 
ORDER  BY NEWID();
Dariusz Woźniak
  • 9,640
  • 6
  • 60
  • 73