【问题标题】:Return default data even if no record in mysql table即使mysql表中没有记录也返回默认数据
【发布时间】:2016-05-03 10:07:09
【问题描述】:

使用 MySql:

查询结果将在webclient用于图表

表:tblActivity

+----------------------------------------------------------+
|id |Activityname |state [state is boolean will have 1 or 0] 
+----------------------------------------------------------+
| 1 | activity1   |  1                                     |
| 1 | activity1   |  0                                     |
| 2 | activity2   |  1                                     |        
| 2 | activity2   |  0                                     | 
| 3 | activity3   |  0                                     | 
| 1 | activity1   |  1                                     |
| 2 | activity2   |  0                                     |  
| 4 | activity4   |  1                                     |
+----------------------------------------------------------+

选择查询

 select id, Activityname, state, count(*) as activitycount 
 from tblActivity
 group by id,state

电流输出

 +--------------------------------------+
 |id |Activityname |state |activitycount|
 +--------------------------------------+
 |1  |activity1    | 1    |  2          |
 |1  |activity1    | 0    |  1          | 
 |2  |activity2    | 1    |  1          | 
 |3  |activity2    | 0    |  2          |
 |3  |activity3    | 0    |  1          |
 +--------------------------------------+

预期输出

 +--------------------------------------+
 |id |Activityname |state |activitycount|
 +--------------------------------------+
 |1  |activity1    | 1    |  2          |
 |1  |activity1    | 0    |  1          |
 |2  |activity2    | 1    |  1          | 
 |2  |activity2    | 0    |  2          |
 |3  |activity3    | 1    |  0 [need]   |
 |3  |activity3    | 0    |  1          |
 |4  |activity3    | 1    |  1          |
 |4  |activity3    | 0    |  0 [need]   |
 +--------------------------------------+

所以,即使特定 activity

的属性 state 没有数据,我也想返回一行

我尝试了 IFNULL、COLEASE 等,但找不到最佳解决方案。

【问题讨论】:

  • 您希望如何创建不存在的行?
  • @Blip 我不希望从表中获取它,而是希望在结果集中手动添加(如果它不存在)。
  • @Blip 派生表?
  • @Blip 是的,我认为派生表按预期工作

标签: mysql select


【解决方案1】:

您需要通过选择所有可用的状态/id/活动来“创建”一个派生表,然后将其加入您的查询:

SELECT t2.id,t1.state,t2.activityname,count(s.activityname) as activitycount
FROM (SELECT distinct t.state FROM tblActivity t) t1
CROSS JOIN (select distinct s.id,s.activityname FROM tblActivity s) t2
LEFT OUTER JOIN tblActivity s
 ON(s.state = t1.state and s.activityname = t2.activityname)
GROUP BY t2.id,t1.state,t2.activityname

【讨论】:

  • 完美,正如预期的那样,在第一次尝试时就像牛眼一样工作。节省了我很多时间。
猜你喜欢
  • 2018-08-04
  • 2018-04-14
  • 2022-10-17
  • 2013-11-17
  • 2018-05-13
  • 1970-01-01
  • 2017-09-16
  • 2011-04-08
  • 2020-12-08
相关资源
最近更新 更多