我在一个名为'data'
的列中有一个包含许多整数的表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
答案 0 :(得分: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语句。
答案 1 :(得分:1)
我认为最简单的方法是加入另一个select语句来获取总行数并将其添加到主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;
答案 2 :(得分:1)
我认为这种情况需要分两步进行:
param
具有您想要的值的随机条目我提出这个解决方案
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;
希望这有助于你
答案 3 :(得分: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