0

我在名为“数据”的列中有一个包含许多整数的表

data  |  param

123      1
432      1
123      1
423      2
234      1
423      2

我有一个查询

SELECT data FROM data_table WHERE param=*something* GROUP BY data
    ORDER BY rand() LIMIT 1

从表中返回一个随机的不同整数。但我还需要获取我选择的整数总数。我试过了:

SELECT DISTINCT(data) AS data, COUNT(DISTINCT(data)) as count FROM
    data_table WHERE param=*something* ORDER BY rand() LIMIT 1

这将返回从中选择数据的正确数字,但返回的数据不是随机的 - 它始终是同一行。所以我需要获取在应用 WHERE 之后选择 rand() 的行数。因此,对上表进行查询应返回:

query WHERE param='1':
    data  count
    123   3
query WHERE param='1':
    data  count
    432   3
query WHERE param='1':
    data  count
    234   3
query WHERE param='2':
    data  count
    423   1
4

4 回答 4

2

这行得通。我通常不建议将查询放在选择器中,因为它会针对返回的每一行进行评估。但是在这种情况下,您只返回一行,所以没关系。

select 
count(distinct data) as cnt,
(SELECT data FROM data_table GROUP BY data
    WHERE param='xxx'
    ORDER BY rand() LIMIT 1) as random
from data_table
WHERE param='xxx'

请参阅此SQL Fiddle以查看它在没有 where 语句的情况下工作。

于 2013-07-23T17:22:01.557 回答
1

尝试这个

select 
     data, (select count(distinct data) from data_table where param=1) as `count`
from 
   data_table  where param = 1
order by rand()
limit 1

在这里演示

于 2013-07-23T17:31:10.473 回答
1

我认为最简单的方法是加入另一个选择语句以获取总行数并将其添加到您的主 SELECT 语句中。

SELECT data AS data, count.count
FROM data 
JOIN (SELECT COUNT(DISTINCT(data)) AS count FROM data WHERE parameter = "test") AS count
WHERE parameter = "test"
ORDER BY rand()
LIMIT 1;

这是一个 SQL Fiddle

于 2013-07-23T17:21:32.880 回答
1

我认为这种情况需要分成两步:

  1. param选择具有所需值的随机条目
  2. 计算数据的条目

我提出这个解决方案

set @yourParam = 1; -- Put here the parameter value you want to filter
select 
    data, 
    (select count(distinct date) from data_table where param=@yourParam) as `count`
from 
    data_table
where 
    param = @yourParam
order by 
    rand()
limit 1;

希望这可以帮助你

于 2013-07-23T17:23:00.280 回答