MySQL - 在同一个表中计数

标签 mysql sql select count sum

我有下表:

+----+---------------------+---------------+
| id |     created_at      | deklaracja_id |
+----+---------------------+---------------+
|  1 | 2015-01-09 12:14:00 |             1 |/*deklaracja*/
|  2 | 2015-02-09 12:14:00 |             1 |/*korekta for 1*/
|  3 | 2015-03-09 12:14:00 |             3 |/*deklaracja/
|  4 | 2015-01-09 12:14:00 |             3 |/*korekta for 3*/
|  5 | 2015-10-09 12:14:00 |             3 |/*korekta for 3*/
|  6 | 2015-10-09 12:14:00 |             6 |/*deklaracja*/
+----+---------------------+---------------+

条件: id = deklaracja_id 是“deklaracja” id <> deklaracja_id 是“korekta”

我需要一个查询来显示 2015 年 1 月 9 日之后的所有“deklaracja”及其“korekty”计数。

Ex.
+----+---------------------+---------------+
| id |     created_at      | korekty_count |
+----+---------------------+---------------+
|  1 | 2015-01-09 12:14:00 |             1 |
|  3 | 2015-03-09 12:14:00 |             2 |
|  6 | 2015-10-09 12:14:00 |             0 |
+----+---------------------+---------------+

我尝试过类似的方法:

SELECT *, 
SUM(CASE WHEN (id <> deklaracja_id)THEN 1 ELSE 0 END ) 
AS korekty_count 
FROM Deklaracja 
WHERE created >= '2015-09-01 00:00:00'

但它不起作用,现在我完全陷入困境了:/

最佳答案

您可以使用相关子查询:

SELECT id, created_at,
       (SELECT COUNT(*) 
       FROM Deklaracja AS t2
       WHERE t1.id = t2.deklaracja_id AND 
             t2.id <> t2.deklaracja_id) AS AS korekty_count
FROM Deklaracja AS t1
WHERE id = deklaracja_id

Demo here

关于MySQL - 在同一个表中计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33103272/

相关文章:

mysql - 如何加入表

mysql - 是否需要再次索引 b,因为它已经是主目录下的 a

mysql - 在 SQL 中使用 Pivot 时的错误代码

mysql - 如何按自定义字段对 MySQL ResultSet 进行排序?

mysql - 如何从一系列行中随机提取 N 条记录并不断迭代?

sql - 在 SELECT 中包含实际上不在数据库中的列

php - 在选择之前是否可以先以编程方式排除某些字段?

mysql - Ruby:Rails:MRI 和 JRuby

mysql - 向用户 PHPMYADMIN 授予权限时出现问题

php - 我需要选择两个单词而不重复它们(PHP)