php - SQL count(*) with group by 没有给我任何东西

标签 php mysql sql

我正在尝试编写一个查询来计算有多少条消息,但没有运气。这些消息被分成几部分。同一消息的所有部分都具有相同的 ID。

这是我的表格“消息

|     Text      |   ID   |   CreatorID  |   Status   |
   Hello Wo..      1234       Martin          OK
   rld! This..     1234       Martin          OK
   is a test!      1234       Martin          OK
   WELCOME p..     9999       Martin         Error
   eople to ..     9999       Martin         Error
   the party!      9999       Martin         Error

我想获取以下信息:

Total count of messages with CreatorID 'Martin' - 2 messages.
Total count of messages with CreatorID 'Martin' and Status 'Error' = 1 message.

我尝试过多种方法,但似乎都不起作用

SELECT COUNT(*) from messages WHERE CreatorID = 'Martin' GROUP BY ID (expecting 2)
SELECT COUNT(*) from messages WHERE CreatorID = 'Martin' AND status = 'Error' GROUP BY ID (expecting 1)

最佳答案

您需要使用Count(Distinct ...)而不是分组依据:

SELECT COUNT(Distinct ID) from messages WHERE CreatorID = 'Martin'
SELECT COUNT(Distinct ID) from messages WHERE CreatorID = 'Martin' AND status = 'Error'

您可以进一步使用条件聚合将它们合并到单个查询中(利用 If() 函数):

SELECT COUNT(DISTINCT ID) AS total_messages, 
       COUNT(DISTINCT IF(status = 'Error', ID, NULL)) AS total_Error_messages 
FROM messages 
WHERE CreatorID = 'Martin'

关于php - SQL count(*) with group by 没有给我任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52688505/

相关文章:

php - 如何使用 Retrofit android 直接调用函数 php

php - 我无法在 php 代码中捕获异常

mysql - 这是将数组存储在数据库中的可接受情况吗?

php - 在行之间插入值

mysql - 按周列出选项变化

使用 SELECT ALL 进行二进制较低时不使用 MySQL 索引

php - 如何从 MySQL 获取 BLOB 图像

php - 在没有 SSL/OAuth 的情况下向 Wordpress 提交评论

mysql - 比较忽略 2 个第一个字符的两列

mysql - 如何解析group by语句中的<first_value>聚合[SNOWFLAKE] SQL