【问题标题】:Aggregation of a fairly complex join一个相当复杂的连接的聚合
【发布时间】:2013-10-01 22:13:02
【问题描述】:

我有以下查询:我刚刚注意到,当他们有 0 item_count 时,并没有汇总用户的计数。我曾尝试调整此查询,因为我以前犯过这个错误,但不是这种更复杂的查询,我需要如何调整它才能显示用户的 item_count 即使为 0??

SELECT u.ID AS user_id,
                u.date_expired AS user_date_expired,
                u.first_name AS first_name,
                u.last_name AS last_name,
                COUNT(i.id)    AS item_count
FROM `user` `u`
LEFT JOIN `item` `i` ON i.recruiter_id = u.id
WHERE ((`u`.`id` IN ('15', '2', 13)) AND (i.date_added >
DATE_SUB(u.date_expired, INTERVAL  30 DAY)))
GROUP BY `u`.`id`

谢谢

强尼

【问题讨论】:

  • 不应该u.date_expiredu.first_nameu.last_name也出现在group by子句中吗?
  • mysql 对标准 sql 有一个扩展,它允许您选择 group by 子句中不存在的列。
  • @Hyperboreus 我只是尝试将它添加到我的控制台中,同样的输出。
  • @SamDufel 我正在使用 Yii QueryBuilder,所以不确定是否有可能。必须调查一下,如果这是问题所在。

标签: mysql join aggregate-functions


【解决方案1】:

试试这个方法

SELECT u.id           AS user_id,
       u.date_expired AS user_date_expired,
       u.first_name   AS first_name,
       u.last_name    AS last_name,
       COUNT(*)       AS item_count
  FROM user u LEFT JOIN item i 
    ON i.recruiter_id = u.id
   AND i.date_added > u.date_expired - INTERVAL  30 DAY
 WHERE u.id IN (15, 2, 13) 
 GROUP BY u.id, u.date_expired, u.first_name, u.last_name

【讨论】:

  • 啊,谢谢,我试图抵消 WHERE 和 AND 子句,但它只是出错了。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2011-03-28
  • 2012-06-09
  • 2014-10-21
  • 2012-08-19
  • 2017-09-23
  • 1970-01-01
  • 2019-11-04
  • 1970-01-01
相关资源
最近更新 更多