0

我在 sql 请求中看到了一个奇怪的行为。

我的表点日志:

# Column Type
1 date timestamp 2 uid varchar(30)
3 ssid varchar(40)
4 reason varchar(50)
5 points int(5) No None

该声明:

SELECT date, count(date) as anzahl FROM pointLog WHERE uid = 1 order by date desc 

返回以下结果

    date                anzahl
2012-09-01 12:21:16     14

但声明:

SELECT date FROM pointLog WHERE uid = 1 order by date desc 

退货

2012-09-02 12:44:08

作为第一个结果。

所以我的问题是:为什么我没有2012-09-02在包含计数的第一个语句中收到第一个结果?

非常感谢!

编辑 作为 anzahl 的计数仅用于验证此示例中的条目是否超过 0。我知道它应该在程序中进行测试。

但我的主要问题是,我无法解释,为什么当它按相同(日期)排序时我会得到 2 个不同的日期。所以唯一的区别是计数属性。但这通常不应该改变排序?

最终*解决方案

SELECT MAX(date) AS maxdate, COUNT(date) AS anzahl FROM pointLog WHERE uid = 1
4

3 回答 3

1

你得到一个结果:日期的计数,前面是任意日期。然后 ORDER BY 语句对其进行排序,这是无操作的,因为只有一行输出。

于 2012-09-02T12:16:46.210 回答
0

您需要在 SQL 语句中使用 GROUP BY,否则 COUNT() 将不会为每个日期提供单独的总计。

于 2012-09-02T11:19:47.667 回答
0

正如@prosfilaes 回答的那样,您的查询不会返回确定性结果,而是date以任意结果返回。

如果你想要最新的日期和计数,你可以使用:

SELECT 
    MAX(date) AS maxdate, 
    COUNT(date) AS anzahl 
FROM 
    pointLog 
WHERE 
    uid = 1 ;
于 2012-09-02T12:49:51.917 回答