簡體   English   中英

SQL查詢建議請

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM