Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在double select查询中生成双值的sql_Sql_Ruby On Rails_Postgresql_Activerecord - Fatal编程技术网

在double select查询中生成双值的sql

在double select查询中生成双值的sql,sql,ruby-on-rails,postgresql,activerecord,Sql,Ruby On Rails,Postgresql,Activerecord,我有以下sql查询: SELECT a.url, b.lpvs, a.volume, a.sales_usd, a.sales_eur, a.sales_gbp, a.sales_jpy FROM ( SELECT referer_trackings.cookie_first_url AS url, count(purchases.id) AS volume, SUM(CASE WHEN purchases.currency = 'USD' THEN purchases.price ELSE 0

我有以下sql查询:

SELECT
a.url,
b.lpvs,
a.volume,
a.sales_usd,
a.sales_eur,
a.sales_gbp,
a.sales_jpy
FROM (
SELECT
referer_trackings.cookie_first_url AS url,
count(purchases.id) AS volume,
SUM(CASE WHEN purchases.currency = 'USD' THEN purchases.price ELSE 0 END) AS sales_usd,
SUM(CASE WHEN purchases.currency = 'EUR' THEN purchases.price ELSE 0 END) AS sales_eur,
SUM(CASE WHEN purchases.currency = 'GBP' THEN purchases.price ELSE 0 END) AS sales_gbp,
SUM(CASE WHEN purchases.currency = 'JPY' THEN purchases.price ELSE 0 END) AS sales_jpy
FROM purchases
JOIN referer_trackings 
ON referer_trackings.trackable_id = purchases.id
JOIN items
ON purchases.item_id = items.id
WHERE items.seller_id = '6'
AND referer_trackings.trackable_type = 'Purchase'
AND purchases.workflow_state = 'payment_successful'
GROUP BY referer_trackings.cookie_first_url
ORDER BY volume DESC
) AS a, (SELECT
count(referer_trackings.id) AS lpvs
FROM referer_trackings
JOIN product_landing_page_views
ON product_landing_page_views.id = referer_trackings.trackable_id
JOIN items
ON items.id = product_landing_page_views.item_id
WHERE referer_trackings.trackable_type = 'ProductLandingPageView'
AND items.seller_id = '6')
AS b
这将产生以下结果:

url    lpvs    volume    sales_usd    sales_eur   sales_gbp   sales_jpy
=======================================================================

url1   1082    3         9.99         9.99        9.99        0.0
url2   1082    1         0.0          9.99        0.0         0.0
        ^
lpvs列的第二行(值:1082,下面有一个小箭头)应该是0,而不是1082。值1082仅适用于第一行

我知道这是由于加入/选择时会加倍,但我似乎无法集中精力取消发布此内容并获得正确的查询

我可以从ruby代码中调用两个查询并合并结果。这将是一个快速的解决方案。但是,我希望保持这一点,并采用纯sql解决方案。我觉得我很亲近

如果有人知道如何使用ActiveRecord来实现这一点,那也太好了:-)

谢谢你的时间

======编辑=====

根据Rahul的调整,这是查询的结果:

url    lpvs    volume    sales_usd    sales_eur   sales_gbp   sales_jpy
=======================================================================

url1   7       7         19.98        29.97       19.98       0.0
url2   1       1         0.0          9.99        0.0         0.0
       ^       ^         ^            ^           ^

^1, row 1 => value should be 1082
^1, row 2 => value should be 0
^2, row 1 => value should be 3
^2, row 2 => value should be 1
^3, row 1 => value should be 9.99 (current value is doubled somehow)
^4, row 1 => value should be 9.99 (current value is tripled somehow)
^5, row 1 => value should be 9.99 (current value is doubled somehow)

这是因为你的虚假下面的查询部分,我不知道你为什么要这样做

....
ORDER BY volume DESC
) AS a, (SELECT
count(referer_trackings.id) AS lpvs
FROM referer_trackings
........)
AS b
在你的主要选择中,你是说

SELECT
a.url,
b.lpvs, <-- result of above posted query part

您是说不需要第二次查询就可以得到所需的结果吗?谢谢:-)。但是,您的查询使lpvs列的值与volume列的值完全相同。。。lpvs的值1082是正确的,但仅适用于第一行,而不是第二行。我复制了您的查询。请参见原始问题中的我的编辑
SELECT
referer_trackings.cookie_first_url AS url,
count(referer_trackings.id) AS lpvs,
count(purchases.id) AS volume,
SUM(CASE WHEN purchases.currency = 'USD' THEN purchases.price ELSE 0 END) AS sales_usd,
SUM(CASE WHEN purchases.currency = 'EUR' THEN purchases.price ELSE 0 END) AS sales_eur,
SUM(CASE WHEN purchases.currency = 'GBP' THEN purchases.price ELSE 0 END) AS sales_gbp,
SUM(CASE WHEN purchases.currency = 'JPY' THEN purchases.price ELSE 0 END) AS sales_jpy

FROM purchases
LEFT JOIN referer_trackings ON referer_trackings.trackable_id = purchases.id
AND referer_trackings.trackable_type IN ('Purchase', 'ProductLandingPageView')
LEFT JOIN product_landing_page_views ON product_landing_page_views.id = referer_trackings.trackable_id
LEFT JOIN items ON purchases.item_id = items.id AND items.seller_id = '6'

WHERE purchases.workflow_state = 'payment_successful'
GROUP BY referer_trackings.cookie_first_url
ORDER BY volume DESC;