Multiplet select语句,每个语句使用CASE并返回两个值

时间:2017-03-23 14:16:20

标签: mysql

我有以下查询:

SELECT COALESCE(income_adsense, income_adsense_u) AS "REV",
   CASE COALESCE(income_adsense, income_adsense_u)
       WHEN income_adsense THEN "REAL"
       WHEN income_adsense_u THEN "USER"
   END AS source
FROM revenue_report LIMIT 1;

将返回如下答案:

REV  |  source
376  |   REAL

现在查询工作正常,但问题是我想为不同的实体执行此选择几次(示例中为adsense)。 我能得到的最好的是:

SELECT rr.site_id, ws.website_name,
   CASE COALESCE(income_adsense, income_adsense_u) 
       WHEN income_adsense THEN "REAL"
       WHEN income_adsense_u THEN "USER"
   END AS adsense_source,
   CASE COALESCE(income_taboola, income_taboola_u)
       WHEN income_taboola THEN "REAL"
       WHEN income_taboola_u THEN "USER"
   END AS taboola_source
FROM revenue_report rr
INNER JOIN websites ws ON ws.website_id = rr.site_id
WHERE (data_date BETWEEN '2017-03-18' AND '2017-03-18')
GROUP BY site_id
LIMIT 1

但这里的问题是我错过了" REV"来自上层例子的价值。我知道它在第二个查询中不存在,但这是最后一次尝试。任何想法如何添加" REV"值逻辑到第二个查询?

在第二个查询中,我将获得这种结果结构:

site_id|website_name|adsense_source|taboola_source

但是这里我错过了第一个查询的COALESCE结果,在该示例中是376

1 个答案:

答案 0 :(得分:1)

那么为什么不能将它包含在SELECT列表中

SELECT rr.site_id, ws.website_name,
   COALESCE(income_adsense, income_adsense_u) AS "REV", //Here
   CASE COALESCE(income_adsense, income_adsense_u) 
       WHEN income_adsense THEN "REAL"
       WHEN income_adsense_u THEN "USER"
   END AS adsense_source,
   CASE COALESCE(income_gol, income_gol_u)
       WHEN income_taboola THEN "REAL"
       WHEN income_taboola_u THEN "USER"
   END AS taboola_source
FROM revenue_report rr
INNER JOIN websites ws ON ws.website_id = rr.site_id
WHERE (data_date BETWEEN '2017-03-18' AND '2017-03-18')
GROUP BY site_id
LIMIT 1