是否可以从SQL数据库中计算和/或返回唯一值?

时间:2013-12-13 03:36:11

标签: sql

假设我有这张表:

ID|Username|Mood    |color
-------------------------
1 |User1   |Sad     |red
2 |User1   |Happy   |red
3 |User1   |Mad     |red
4 |User1   |Scared  |green
5 |User1   |Sad     |green
6 |User2   |Sad     |purple
7 |User2   |Happy   |red
8 |User3   |Mad     |blue
9 |User4   |Scared  |green
10|User4   |Sad     |red

在DB中,我总共有4个用户:User1,User2,User3和User4。 是否有一个SQL语句可以计算某列中唯一值的数量? 是否有可以返回这些唯一值的SQL语句? 所以它会回来:

ID|Unique_Users
----------------
1 |User1
2 |User2
3 |User3
4 |User4

如果我的所有愿望都能实现,我想通过查询交叉点唯一值,其中用户名和他的心情都是唯一的并获得:

ID|Username|Mood
-----------------
1 |User1   |Sad
2 |User1   |Happy
3 |User1   |Mad
4 |User1   |Scared
6 |User2   |Sad
7 |User2   |Happy
8 |User3   |Mad
9 |User4   |Scared
10|User4   |Sad

(在原始表中,User1在索引1和5中很难过,但在新表中,因为它不是唯一的,所以不会重复)

注意: 1.当我插入表格时,检查值是否已存在不是问题,因为每个条目中都有其他信息(不重复) 2.我知道我可以选择所有值,然后处理信息以找出唯一值,并为获取其余信息的每个唯一值运行新查询,但这需要服务器使用,我正在尝试使用它尽可能高效。

3 个答案:

答案 0 :(得分:1)

您似乎正在寻找一个简单的小组:

SELECT MIN(id), username, mood FROM table
GROUP BY username, mood

现在,请注意,user25不会返回6,而是67

此查询返回所有唯一username, mood对,每当找到重复对时,它都会被丢弃,并且选择重复项中具有最小值的id(从User1, Sad猜测对选择)。

答案 1 :(得分:0)

目前还不清楚你想要什么,但其中一个应该有希望帮助:

要获取唯一的行,请使用DISTINCT

select distinct *
from mytable

仅获得只有一种情绪的用户:

select * from mytable
where id in (
    select id
    from mytable
    group by id
    having count(*) = 1)

答案 2 :(得分:0)

  

是否有一个SQL语句可以计算某列中唯一值的数量?

SELECT COUNT(DISTINCT Username) FROM table1
  

是否有可以返回这些唯一值的SQL语句?

SELECT DISTINCT Username FROM table1
  

如果我的所有愿望都能实现,我想通过查询用户名和他的心情的交叉点唯一值来进一步实现这一目标

嗯,你需要更好的愿望,但是你走了:

SELECT DISTINCT Username, Mood FROM table1

我假设你的ID只是说明了记录号,而在实际输出中并不是必需的。