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行。