【问题标题】:SQLite COUNT JOIN DISTINCTSQLite COUNT JOIN DISTINCT
【发布时间】:2016-09-13 22:51:15
【问题描述】:

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

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 个 Orders,查询应该返回 1 因为是同一个客户和同一个商店 BUT 返回3意思不是指有订单的客户而是指订单本身

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

【问题讨论】:

    标签: android sqlite join count


    【解决方案1】:

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

    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'
    

    【讨论】:

    • 为了简单起见,我尝试了第二个,效果很好! :3
    猜你喜欢
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 2013-05-12
    • 2012-12-12
    相关资源
    最近更新 更多