2014-11-06 16 views
2

我試圖從我的數據庫中拉出兩件事:一個屬性爲TRUE的條目和其中屬性爲FALSE的條目。然後,我想將第一個結果除以第二個結果,以獲得屬性爲TRUE的條目的百分比。SQL:選擇兩個不同的東西,並在一個查詢中對結果進行計算

SELECT product, COUNT(entries) FROM myTable 
WHERE has_bug = 1 
AND date > "2014-07-01" 
GROUP BY product 

SELECT product, COUNT(entries) FROM myTable 
WHERE has_bug = 0 
AND date > "2014-07-01" 
GROUP BY product 

我得到的結果很好,我可以單獨做的劃分,但有可能來劃分這兩個SELECT語句的結果在這一個查詢?

編輯: 這奏效了:

SELECT product, SUM(has_bug = 1)/SUM(has_bug = 0) 
FROM myTable 
WHERE date > "2014-07-01" 
GROUP BY product 

回答

1

你可以(AB)使用MySQL的自動類型轉換邏輯:

SELECT product, (SUM(entries = 0)/SUM(entries = 1)) AS ratio 
FROM myTable 
WHERE date > '2014-07-01' 
GROUP BY product 

布爾真/假的entries = X比較會得到轉換後的整數01由MySQL,總結,基本上覆制您的COUNT(),但在一個單一的查詢。

+0

謝謝,沒有的伎倆! SELECT product,SUM(has_bug = 1)/ SUM(has_bug = 0)... – kevingduck 2014-11-06 19:30:29

0

使用條件聚集。事實上,以下將做你想要什麼,假設has_bug只需要對01值:

select product, avg(has_bug) 
from mytable 
where date > '2014-07-01' 
group by product; 

更明確的匹配到您的查詢是:

select product, sum(has_bug = 1)/count(*) 
from mytable 
where date > '2014-07-01' 
group by product; 
0
select 
Product , 
(case when has_bug=1 then count(entries) else 0 end) as Bug , 
(case when has_bug=0 then count(entries) else 0 end) as NoBug , 
((case when has_bug=1 then count(entries) else 0 end)/
(case when has_bug=0 then count(entries) else 0 end)) as Percentage 
from Mytable 
WHERE 
date > "2014-07-01" 
GROUP BY product 
0

您的代碼取決於您的輸出格式需要的樣子。我會嘗試這個

SELECT Product, has_bug, cnt, (cnt/SUM(cnt) OVER (PARTITION BY product)) cntovrttl 
FROM(
SELECT product, has_bug, COUNT(entries) as cnt 
FROM myTable 
WHERE date > "2014-07-01" 
GROUP BY product, has_bug) tbl1 

布拉德

相關問題