【问题标题】:SQL - Count the number of omitted resultsSQL - 计算省略结果的数量
【发布时间】:2014-01-16 12:48:04
【问题描述】:

我正在寻找一种方法来计算我的 sql 查询省略了多少结果(我正在使用 Sqlite):

SELECT id FROM users GROUP BY x, y, email;

此查询返回 121 个 id(共 50 000 个),如果知道每对 (x,y) 省略了多少个 id 会很好。

有可能吗?

感谢您的帮助,

编辑:

样本:

+--+-----+----+-------------+
|ID|x    |y   |email        |
+--+-----+----+-------------+
|1 |48.86|2.34|john@test.com|
+--+-----+----+-------------+
|2 |48.86|2.34|phil@test.com|
+--+-----+----+-------------+
|3 |40.85|2.31|john@test.com|
+--+-----+----+-------------+
|4 |48.86|2.34|phil@test.com|
+--+-----+----+-------------+
|5 |40.85|2.31|john@test.com|
+--+-----+----+-------------+
|6 |48.86|2.34|phil@test.com|
+--+-----+----+-------------+

查询:

SELECT id FROM users GROUP BY x, y, email;

结果:

+--+
|id|
+--+
|1 |
+--+
|2 |
+--+
|3 |
+--+

因为:id 4 和 id 6 的 x,y,email 与 id 2 相同,而 5 与 3 相同。

我需要最快的方法来知道这一点:

id 1 -> 0 omitted
id 2 -> 2 omitted (id 4 and id 6 had same x, y, email)
id 3 -> 1 omitted (id 3)

【问题讨论】:

  • 请提供样本数据和期望的结果。
  • 确实,我希望我的解释是正确的,我对技术英语不是很熟悉..

标签: sql sqlite count


【解决方案1】:
SELECT id, COUNT(*) -1 AS omitted FROM users GROUP BY x, y, email;

...假设您实际上想“知道每个元组 (x, y, email) 省略了多少。

【讨论】:

  • 旁注:虽然它“有效”,但SELECT 列表引用未在 GROUP BY 子句中命名的非聚合列并不是一个好习惯。 (因为您将得到的实际id 是未定义的)
【解决方案2】:

你可以试试这个:

SELECT COUNT(*)
FROM
(
SELECT *
FROM users
MINUS
SELECT id
FROM users
);

这将向您显示所有记录,减去您选择的记录。希望这会有所帮助。

【讨论】:

    【解决方案3】:

    您可以计算数据库的整体大小,然后减去结果大小。根据您的数据库有多大,这也可能比其他方式更快。

    【讨论】:

      猜你喜欢
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 2012-09-26
      • 2017-07-05
      • 1970-01-01
      相关资源
      最近更新 更多