Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL,SQL如何检索特定列中包含较少使用值的整行_Mysql_Sql_Group By_Count_Distinct - Fatal编程技术网

MySQL,SQL如何检索特定列中包含较少使用值的整行

MySQL,SQL如何检索特定列中包含较少使用值的整行,mysql,sql,group-by,count,distinct,Mysql,Sql,Group By,Count,Distinct,我周末有一个很好的小测验。。。很抱歉,输入标题甚至很难 上下文 让我举一个例子(uuid和value是字符串): 这是预期的结果 --------------- uuid | value --------------- 1 | a 3 | z 3 | b 因为上面是包含给定uuid所用平均值中较不常见的值(或相等值)的行。 我正在玩groupby,DISTINCT,COUNT 尝试一次 SELECT uuid, COUNT(uuid) as time_used

我周末有一个很好的小测验。。。很抱歉,输入标题甚至很难

上下文 让我举一个例子(
uuid
value
是字符串):

这是预期的结果

---------------
uuid   | value
---------------
1      | a
3      | z
3      | b
因为上面是包含给定
uuid
所用平均值中较不常见的值(或相等值)的行。 我正在玩
groupby
DISTINCT
COUNT

尝试一次

SELECT uuid, COUNT(uuid) as time_used, value
FROM table1
GROUP BY uuid, value ORDER BY COUNT(*) DESC;

SELECT uuid as occ
FROM (
    SELECT uuid, COUNT(uuid) as occ, value
    FROM table1
    GROUP BY uuid, value ORDER BY COUNT(*)) as t
GROUP BY uuid
HAVING COUNT(uuid) > 1;
尝试两次

SELECT uuid, COUNT(uuid) as occ
FROM (
    SELECT uuid, COUNT(uuid) as occ, value
    FROM table1
    GROUP BY uuid, value ORDER BY COUNT(*)) as t
GROUP BY uuid;

尝试三次

SELECT uuid, COUNT(uuid) as time_used, value
FROM table1
GROUP BY uuid, value ORDER BY COUNT(*) DESC;

SELECT uuid as occ
FROM (
    SELECT uuid, COUNT(uuid) as occ, value
    FROM table1
    GROUP BY uuid, value ORDER BY COUNT(*)) as t
GROUP BY uuid
HAVING COUNT(uuid) > 1;
但这不是正确的一个,我仍然错过了一步

请注意,我使用的是MySQL,数据很少(大约2000个),但仍然希望“性能”,它们会增长,我希望遵守MySQL的
only\u full\u group\u by
语句。
谢谢。

在MySQL 8+中,您可以使用窗口功能:

SELECT uv.*
FROM (SELECT uuid, COUNT(*) as cnt, value,
             RANK() OVER (PARTITION BY uuid ORDER BY COUNT(*)) as seqnum
      FROM table1
      GROUP BY uuid, value 
     ) uv
WHERE seqnum = 1;

在8之前的MySQL版本中,您可以通过使用子查询获得每个
uuid
/
组合的计数来生成所需的结果,然后使用该子查询获得每个
uuid
的最小和总计数值,然后将该结果连接到子查询的另一个副本以获得输出:

SELECT c.uuid, c.value
FROM (
  SELECT uuid, MIN(cnt) AS min_cnt
  FROM (
    SELECT uuid, value, COUNT(*) AS cnt
    FROM table1
    GROUP BY uuid, value
  ) c
  GROUP BY uuid
  HAVING SUM(cnt) > 1
) m
JOIN (
  SELECT uuid, value, COUNT(*) AS cnt
  FROM table1
  GROUP BY uuid, value
) c ON c.uuid = m.uuid AND c.cnt = m.min_cnt
输出:

uuid    value
1       a
3       z
3       b

StackOverflow不是免费的编码服务。你应该会的。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅,并使用:)编写查询以获得按uuid和值分组的计数。然后将其用作查询中的子查询,该查询获取按uuid分组的具有最小计数的行。关于如何做第二部分,请参阅。据我所知,没有MySQL 5.8。让我来修复MySQL版本。。拜托,这是我对stackoverflow提出的最糟糕的问题。。太累了,很抱歉,我只是尝试了一下,但是返回了0行。