【问题标题】:mySQL query - unique value using GROUP and HAVINGmySQL 查询 - 使用 GROUP 和 HAVING 的唯一值
【发布时间】:2021-12-02 07:59:14
【问题描述】:

这是我的示例数据:

id  name      source
--------------------------
1   aaa       source1
2   bbb       source1
3   ccc       source1
4   ddd       source1
5   aaa       source2
6   bbb       source2
3   ccc       source2
4   ddd       source2
7   eee       source2

我正在尝试查询“名称”中的值仅出现一次(唯一)的所有记录 - 因此所需的输出将是:

id  name      source
--------------------------
7   eee       source2

我尝试了GROUP BY nameHAVING 的组合,但没有成功

SELECT name, source, COUNT(*) AS total FROM data
GROUP BY name
HAVING total=1

有什么想法吗?

PS:如何过滤“来源”? WHERE source = "source2" 无济于事..

【问题讨论】:

  • 您的问题毫无意义,因为 ccc 和 ddd 在您的示例中也是唯一名称
  • 哦,谢谢.. 编辑了它

标签: mysql group-by having


【解决方案1】:

您的查询有效,但使用 FULL_GROUP_By

所有不在选择中的列都需要aggregation function

CREATE TABLE data (
  `id` INTEGER,
  `name` VARCHAR(3),
  `source` VARCHAR(7)
);

INSERT INTO data
  (`id`, `name`, `source`)
VALUES
  ('1', 'aaa', 'source1'),
  ('2', 'bbb', 'source1'),
  ('3', 'ccc', 'source1'),
  ('4', 'ddd', 'source1'),
  ('5', 'aaa', 'source2'),
  ('6', 'bbb', 'source2'),
  ('3', 'ccc', 'source2'),
  ('4', 'ddd', 'source2'),
  ('7', 'eee', 'source2');
SELECT name, MIN(source), COUNT(*) AS total FROM data
GROUP BY name
HAVING total=1
姓名 |最小(来源)|全部的 :--- | :------------ | ----: eee |来源2 | 1

db小提琴here

【讨论】:

  • 谢谢 - 如何过滤 source2?其中 source = "source2" 会给出错误的结果..
  • 这是第二个问题,但你基本可以将其添加到子查询 dbfiddle.uk/…
【解决方案2】:

您需要将source添加到group by或将其从select中删除或将其放入聚合函数中,否则会引发错误。

【讨论】:

  • mysql 支持 total =1 见dbfiddle.uk/… 我写的这些问题没有意义
  • @nbk 谢谢。我的办公桌上只有 sql server 并且它抛出了一个错误,我认为它在 mysql 上也是一样的。我根据您的评论更新了我的答案,以免错过任何人。
猜你喜欢
  • 2023-03-07
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 2021-12-31
  • 1970-01-01
  • 2016-06-20
相关资源
最近更新 更多