[英]SQL query suggestions please
我正在嘗試編寫一個SQL查詢來計算許可證價格。 請檢查以下架構:
表: 價格
| ID (bigint) | USERS(Bigint) | TYPE (varchar) | PRICE (BIGINT)
------------------------------------------------------------------
| 1 | 1 | other | 20 |
| 2 | 15 | local | 13.96 |
表: 許可證
| ID (bigint) | USERID (Bigint) |STATUS(VARCHAR) | USERS(bigint) | DEVICES(BIGINT) | TYPE(VARCHAR) | REQUEST_TYPE (VARCHAR) |
--------------------------------------------------------------------------------------------------------------
| 1 | 13 | 10 | 10 | local | add |
| 2 | 13 | 15 | 20 | other | extend |
我的目標:
給定一個用戶名和類型,我想基於以下條件計算所有許可證的總價:
對於給定的用戶名和類型:
1)獲取所有具有request_type作為新(或新)擴展的許可證
2)對於每個這樣的許可證,將用戶數量(USERS列)與“價格”表中的USERS列匹配,並作為設備進行計算*(價格表中的關聯價格)
3)使用此計算所有這些價格的總和並返回總價格。
我正在嘗試通過使用以下查詢來做到這一點,但我還沒有成功:
SELECT SUM(PRICE) FROM prices
LEFT OUTER JOIN licenses
ON (
prices.users=licenses.users
AND prices.type=licenses.type
)
WHERE licenses.userid=13
AND licenses.status='approved'
AND licenses.request_type IN ('add','extend')
請在此處檢查SQL Fiddle: http ://sqlfiddle.com/#!2 / 05f5cf
請幫助。
謝謝大衛
從您的評論和更新中,我認為您想要(不確定是否有必要比較許可用戶和價格用戶,但是您似乎想要這樣做)
select coalesce(sum( p.users * p.price), 0)
FROM licenses l
inner join prices p
on p.type = l.type
--and p.users = l.users
where l.status = 'approved'
and l.request_type in ('add', 'extend')
and l.userid = 13
編輯
實際上,您是否需要檢查AND用戶的類型是否相同,或者只是user?
如果只需要檢查用戶,則
inner join prices p
on p.users = l.users
如果只需要檢查類型
inner join prices p
on p.type = l.type
如果兩者都需要,則樣本數據將為0。
請參閱具有3個版本的SqlFiddle 。
結果將為null,因為查詢找不到LEFT OUTER JOIN的條件
有查詢
SELECT SUM(PRICE) FROM prices
LEFT OUTER JOIN licenses
ON (
prices.users=licenses.users
AND prices.type=licenses.type //cannot found condition on table
)
WHERE licenses.userid=13
AND licenses.status='approved'
AND licenses.request_type IN ('add','extend')
這是表內的數據
餐桌牌照
(1, 'approved', 10, 10, 'local', 'add', 13),
(2, 'approved', 15, 20, 'other', 'extend', 13);
和表價格
(1, 1, 'other', 20),
(2, 15, 'local', 13.96);
你的條件是
prices.users=licenses.users
AND prices.type=licenses.type //cannot found condition on table
that mean if from your table is
at licences table have a type="other" and users=15
but at prices table haven't have type="other" and users=15
因此結果將為空
因為當我更改表格價格的第一行(1,1,'other',20)變為(1,15,'other',20),
結果將是= 20
您需要更改第一行查詢
SELECT SUM(PRICE) FROM prices
be
SELECT IFNULL(SUM(PRICE),0) FROM prices
如果未找到行,則結果將更改為0而不是null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.