【问题标题】:How do combine a count in a particular select statement?如何在特定的 select 语句中组合计数?
【发布时间】:2016-05-30 09:45:56
【问题描述】:

在我们的 postgresql 数据库中,我们目前有 2 个名为 Users 和 Bookings 的表。

我们目前正试图了解昨天预订的用户在一段时间内完成了多少预订。

这是我们目前的查询:

SELECT "domain".users.email, COUNT("domain".bookings."id")
FROM "domain".bookings
INNER JOIN "domain".users ON "domain".users."id" = "domain".bookings.user_id
GROUP BY "domain".users.email

如果我们有昨天通过过滤器创建预订的日期(字段“domain.bookings.created_at”),我们只会得到昨天的数据。

有没有办法查看谁在昨天购买了多少订单?

谢谢! 卢卡

【问题讨论】:

  • count(case when bookingdate = yesterday then 1 end)(伪SQL)添加到选择列表中。
  • 请添加一些示例数据和预期的输出。我真的不明白你期望什么输出

标签: sql postgresql


【解决方案1】:

试试这个

SELECT "domain".users.email, COUNT(CASE WHEN bookingdate = current_date - 1 THEN 1 END ) AS TOTAL_BOOKING
FROM "domain".bookings
INNER JOIN "domain".users ON "domain".users."id" = "domain".bookings.user_id
GROUP BY "domain".users.email

【讨论】:

    【解决方案2】:

    这就是你要找的东西:

    SELECT u.id, u.email, count(b.id) AS "Total Bookings" 
    FROM "domain".bookings as b
      JOIN "domain".users as U ON u.id = b.user_id
    WHERE EXISTS (SELECT 1 
                  FROM "domain".bookings b2
                  WHERE b2.created_at = current_date - 1
                    AND b2.user_id = b.user_id)
    GROUP BY u.email;
    

    exists 条件只会从bookings 表中为昨天预订过东西的用户返回行。


    不相关,但是:使用像domain 这样需要双引号作为标识符的关键字并不是一个好主意。如果您找到不同的名称,从长远来看,它会为您省去一些麻烦

    【讨论】:

    • 谢谢!我测试了,但我仍然得到所有用户的数字,看起来过滤器不起作用......查询是:SELECT "domain".users."id", "domain".users.email, count("domain ".bookings."id") AS "Total Bookings" FROM "domain".bookings 加入 "domain".users ON "domain".users."id" = "domain".bookings.user_id WHERE EXISTS (SELECT 1 FROM " domain".bookings WHERE "domain".bookings.created_at
    【解决方案3】:

    感谢您的回答。我可能不够精确!

    基本上,如果我使用以下查询:

    SELECT
    "domain".users.email,
    COUNT( "domain".bookings."id") AS "Total Bookings"
    FROM
    "domain".bookings
    INNER JOIN "domain".users ON "domain".users."id" = "domain".bookings.user_id    
    GROUP BY
    "domain".users.email
    

    我得到一个用户的预订数量。

    但是

    我想获得以下信息:昨天购买的用户在所有时间进行的预订数量。

    我试过了

    SELECT
    "domain".users.email,
    COUNT( "domain".bookings."id") AS "Total Bookings"
    FROM
    "domain".bookings
    INNER JOIN "domain".users ON "domain".users."id" = "domain".bookings.user_id    
    WHERE
    "domain".bookings.created_at = 'yesterday'
    GROUP BY
    "domain".users.email
    

    但我没有收到任何回复...

    感谢您的帮助!

    卢卡

    【讨论】:

    • 不要添加其他信息作为答案 edit 您的问题。
    • 好吧,对不起...这一切都很新!
    猜你喜欢
    • 2017-02-11
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 2017-07-14
    • 2014-07-27
    相关资源
    最近更新 更多