mysql - 计算不同的元素并只返回一个

标签 mysql sql

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

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

最佳答案

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

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 语句的情况下工作。

关于mysql - 计算不同的元素并只返回一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17816555/

相关文章:

Java JTDS 到 SQL Server 2000

mysql - 在 MySQL 的存储过程中编写可选参数?

mysql - 哪个是数据库状态值的更好设计?

php - 根据程序情况查询运行时构建

php - amchart 通过 JSON 绘制多个数据

mysql - 处理'同时更新内容的SQL查询

sql - 我将如何为读写操作实现单独的数据库?

sql - 在sql中优先向债权人分享现金

mysql - 在 MySQL 中的整数字段上运行带引号(字符串)的查询时会发生什么并发症

sql - PostgreSQL "?"参数占位符不适用于 "WITH"