【问题标题】:SQL "group by" question - I can't select every columnSQL“分组依据”问题 - 我无法选择每一列
【发布时间】:2010-10-08 01:32:18
【问题描述】:

我有一个数据库,其中每一行都有一个 id、一个 URL 和一个 XML。 ID 是唯一的,但 URL 列可以有重复项。 我需要所有的 URL,没有重复,对于每个 URL,我需要 id 和 XML。

如果我只询问 URL 和 ID,我会使用以下查询:

select URL, max(ID) as ID from T1 group by URL

一切都很好。

但是当我还想要 XML 时,我使用以下查询:

select URL, max(ID) as ID, XML from T1 group by URL

我收到以下错误:

ISC ERROR CODE:335544569
ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -104
user name required

我做错了什么?

谢谢,

迪克拉

感谢您的回答。我要补充说明:
如果 URL 重复,我不在乎会返回哪个。 但我需要让它们没有重复,即使行之间的 XML 不同。 有可能吗?
谢谢!

【问题讨论】:

  • “但我需要让它们没有重复,即使 XML 不同”我很好奇你为什么需要 XML,但不要关心重复的 URL 可能每个都有不同的 XML重复的行,因此您实际上会为检索到的 XML 获得“随机选择”
  • 这是因为 XML 的细节对于两行都是相同的,但它们只会在我不关心的日期和时间的值上有所不同。

标签: sql group-by


【解决方案1】:
select id, url, xml
from table1
where id in (
    select min(id)
    from table1
    group by url)

会给你删除重复网址的行(并且只包括重复网址的第一个实例)

【讨论】:

  • 这个查询也会给出有重复的 url(但第一个重复)的结果。如果您只想要不重复的网址,请添加到第二个选择:WHERE count(id) = 1
  • @klew - 是的,你是对的。据我了解,dikla 想要表格中的所有网址,但不想再次列出任何网址。
  • @klew - 再想一想,如果你只想要没有重复的 url,那么 dikla 应该包含一个 HAVING 子句而不是 WHERE 子句。所以查询需要: Select id, url, xml from table1 where id in (select min(id) from table1 group by url HAVING count(id) = 1)
【解决方案2】:

您需要重新阅读您的问题并考虑一下。

您要求提供 URL(可以是重复的),但您不希望重复,并且您还需要 ID(不重复)。样本数据:

1,http://www.google.com
2,http://www.yahoo.com
3,http://www.google.com

在这种情况下,您究竟想返回什么,记住 google 有多个 ID?

XML 也是如此。如果给定 URL 不是唯一的,您需要指定如何为每个 URL 仅获取一个条目,这就是您的查询不起作用的原因。

【讨论】:

    【解决方案3】:

    您没有对列 XML 执行聚合函数,您必须将其包含在您的分组依据中。

    请记住,如果每一行的数据都不同,则实际上无法对其进行分组,并且您将无法获得所需的结果,尽管它们是您向数据库询问的结果 :)。

    【讨论】:

      【解决方案4】:
      select urlMaxId.id, urlMaxId.url, table1.html from (select url, max(id) id from table1 group by url) urlMaxId inner join table1 on urlMaxId.id = table1.id
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多