【问题标题】:Is it possible to count and/or return unique values from an SQL database?是否可以从 SQL 数据库中计算和/或返回唯一值?
【发布时间】:2013-12-13 03:36:11
【问题描述】:

假设我有这张桌子:

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

在数据库中,我总共有 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中是sad,但在新表中,由于不是唯一的,所以不重复)

注意事项: 1.插入表时不需要检查值是否已经存在,因为每个条目中都有附加信息(不重复) 2.我知道我可以选择所有值,然后处理信息以找出唯一值,并为每个唯一值运行一个新查询以获取其余信息,但这需要使用服务器,我正在努力做到这一点尽可能高效。

【问题讨论】:

  • 请格式化问题。作为旁注,在您的“最预期的结果”中,user2 拥有idid 是没有意义的,因为它属于user1user2 应该同时具有 67
  • @MostyMostacho,谢谢,没注意到。

标签: sql


【解决方案1】:

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

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

现在,请注意,这不会返回 user2 并带有两个 ID 56,而是 67

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

【讨论】:

  • 你能解释一下 Group 和 Distinct 的区别吗?
  • Distinct 是一个简单的概念:它只会选择所有值作为一个整体是唯一的行。 group by 将为分组列和非分组列创建唯一值,它将允许您为所有被放在一起的值应用一个函数(在本例中为 mininmum 函数)。可能一个教程会比评论更详细地解释它:)
【解决方案2】:

目前还不清楚您想要什么,但其中之一应该会有所帮助:

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

select distinct *
from mytable

只获取只有一种心情的用户:

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

【讨论】:

    【解决方案3】:

    有没有可以统计某列唯一值个数的SQL语句?

    SELECT COUNT(DISTINCT Username) FROM table1
    

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

    SELECT DISTINCT Username FROM table1
    

    如果我的所有愿望都能实现,我想更进一步,通过查询用户名和他的心情的交集唯一值

    好吧,你需要更好的祝愿,但你去吧:

    SELECT DISTINCT Username, Mood FROM table1
    

    我假设您的 ID 只是说明记录编号,在实际输出中没有必要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 2021-10-21
      • 1970-01-01
      相关资源
      最近更新 更多