android - SQLite COUNT JOIN DISTINCT

标签 android sqlite join count

我确定这是重复的,但我找不到答案:

SQLITE 查询问题

表格:

  • 客户
  • 订单

关系:客户有很多订单

成功条件:

获取下单客户数

查询:

SELECT COUNT(Client.id) AS count
  FROM Client
  INNER JOIN Order
    ON Order.id = Client.id
    AND Order.storeId = Client.storeId // This is because Clients have many stores
  WHERE
    AND Order.id IS NOT NULL
    AND Order.date BETWEEN '12-09-2016 16:00:00' AND '13-09-2016 16:00:00'

问题

如果客户 1、商店 1 有 3 个订单,则查询应返回 1,因为返回的是同一客户和同一商店 BUT 3 意思是不计算有订单的客户,而是订单本身

解决方案? 请记住,这是 SQLite 并在 Android 4.1.1 中使用,因此某些 SQLite 函数可能不可用

最佳答案

内部查询获取所有有订单的客户。外部查询计算那些记录

select count(*)
from
( 
      SELECT Client.id
      FROM Client
      INNER JOIN Order ON Order.id = Client.id
                      AND Order.storeId = Client.storeId
      WHERE Order.date BETWEEN '12-09-2016 16:00:00' AND '13-09-2016 16:00:00'
      GROUP BY Client.id
) tmp

一个更简单的版本是计算不同(distinct)客户端的数量

  SELECT count(distinct Client.id)
  FROM Client
  INNER JOIN Order ON Order.id = Client.id
                  AND Order.storeId = Client.storeId
  WHERE Order.date BETWEEN '12-09-2016 16:00:00' AND '13-09-2016 16:00:00'

关于android - SQLite COUNT JOIN DISTINCT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39480128/

相关文章:

node.js - 使用node js连接sqlite数据库文件时出错

python - 使用 SQLite 进行复杂的 SQL 查询

mysql - 将单个表的单列连接到另一个表的多列

mysql - 使用 mysql 查询计算 "trash bin"中的所有项目

android - 从 Google 照片提供商选择视频不会提供 mimetype 信息

java - 获取已加载到 webview 中的 URL 的 HttpResponse

android - 如何在 index.html 中引用 cordova.js

python - Django : how to use multiple databases?

MySQL - 将表与主表连接两次

android - 如何在 Flutter 2.8 中更改 minSdkVersion/targetSdkVersion?