0

我希望我的标题措辞正确,但如果它令人困惑,我将解释我想要实现的目标。

在我的 webapp 中,用户需要在加入之前发送应用程序。当用户对其应用程序进行更改而不是更新当前行时,我决​​定插入一个新行,以便用户可以返回过去的版本。

所以可以说我的桌子看起来像这样

id  |  user_id  | approved  |  timestamp

如何在不显示 user_id 重复项的情况下计算有多少未批准的应用程序?

我目前有这个

SELECT * FROM `applications` WHERE approved = 0 GROUP BY user_id 

现在我不知道这是否是解决这个问题的正确方法,但经过一些在线研究,这是我可以放在一起的最好的方法,这将返回 user_id 分组但显示来自用户的最旧数据。

(统计结果或显示每个未批准用户应用程序的整行的查询是我所追求的)

编辑

为了澄清事情,让我们说

用户 1 已对其应用程序进行了 3 次编辑。(共4行)

用户 2 已对其应用程序进行了 2 次编辑。(共3行)

我如何从所有用户那里获得未批准的应用程序的数量,但每个用户只计算 1 个(按时间戳的最新提交)。

4

4 回答 4

0

试试这个:

SELECT user_id,count(user_id),timestamp from (SELECT DISTINCT user_id, COUNT(user_id),timestamp FROM applications WHERE approved =0 ORDER BY timestamp DESC) AS temp;
于 2013-07-23T20:19:25.440 回答
0

我认为你的方法是最好的方法。您也可以将 distinct 与嵌套连接一起使用。但是如果你使用

SELECT DISTINCT COUNT(*) FROM applications WHERE approved =0 ORDER BY timestamp DESC

您将无法获取用户的所有信息。

于 2013-07-23T20:22:56.817 回答
0

试试这个:

SELECT user_id, MAX(timestamp), COUNT(*), (SELECT COUNT(*) FROM `applications` WHERE approved = 0)
FROM `applications` 
WHERE approved = 0 
GROUP BY user_id 
HAVING COUNT(*) > 1

编辑了 COUNT 和 (*) 之间的空格

于 2013-07-23T20:29:04.867 回答
0
SELECT 
  user_id,
  COUNT(user_id) total_apps, 
  SUM(case  when approved = 0 then 1 else 0 ) unapproved_apps 
FROM applications
GROUP BY user_id  
于 2013-07-23T20:54:48.263 回答