不确定如何在选择内执行计数

时间:2014-06-30 22:50:00

标签: mysql

我已经尝试了很多方法来解决这个问题,到目前为止所有方法都失败了。

我有3张桌子。包含所有帐户信息的用户表。一个事件表,其中包含未来促销的所有详细信息,以及一个列表,其中包含一个列表,其中包含所有邀请参加活动的人员及其状态。

这是我目前的查询:

SELECT u.Name, l.*, e.*
FROM event e, user u, list l
WHERE e.event_id IN (SELECT l.event_id 
                     FROM list l, event e, user u
                     WHERE e.event_id=l.event_id 
                     AND l.user_id=1)
AND u.user_id=e.creator_id
AND l.event_id IN (SELECT l.event_id 
                   FROM list l 
                   WHERE l.user_id=1 
                   AND l.event_id=e.event_id)
AND l.user_id=1 ORDER BY e.creationDate DESC 

我正在尝试添加一个简单的计数,以便返回一个新的“Going”列,这将计算所有被邀请的人:

 | User_ID | Name | Event_ID | Event_Name | Date | List_ID | Accepted | Going |
 |---------|------|----------|------------|------|---------|----------|-------|

在我的查询中添加一个简单的计数会返回错误“命令不同步;您现在无法运行此命令”:

SELECT u.Name, l.*, e.*, (SELECT l.user_id, COUNT(*) as count
                          FROM list l
                          GROUP BY l.user_id
                          ORDER BY count DESC) as Going)
FROM event e, user u, list l 
WHERE e.event_id IN (SELECT l.event_id 
                     FROM list l, event e, user u
                     WHERE e.event_id=l.event_id 
                     AND l.user_id=1)
AND u.user_id=e.creator_id
AND l.event_id IN (SELECT l.event_id 
                   FROM list l 
                   WHERE l.user_id=1 
                   AND l.event_id=e.event_id)
AND l.user_id=1 ORDER BY e.creationDate DESC 

我已经读过它,这似乎与调用函数的顺序有关。我不确定如何计算它,因为计数似乎在正确的位置。

1 个答案:

答案 0 :(得分:0)

您需要相关子查询,而不是group by

SELECT u.Name, l.*, e.*, (SELECT l.user_id, COUNT(*) as count
                          FROM list l2
                          WHERE l2.user_id = l.user_id
                         ) as Going

我不确定count(*)在子查询中做了什么。此外,您应该学习使用正确的显式join语法,而不是隐式连接,它们不那么强大,更容易出错,而且更难阅读。