[英]Mysql- Select from two columns on a particular condition
我有兩個表Table1和Table2通過xid和Yid相互連接。
表格1
xid(int) category(varchar) subcat(varchar)
1 Venue Resort
2 Venue Resort
3 Venue Resort
4 Venue Resort
5 Venue Resort
6 Venue Resort
7 Venue Banquet Hall
8 Venue Resort
9 Apparel Designer
表2
Yid(int) minp(varchar) maxp(varchar)
1 800 1000
2 900 1200
3 1100
4 1300 1600
5 1800
6 800 2000
7 800 1000
8 1500 2100
9 15000 60000
我將這些供應商分為三類,第一類是價格低於盧比的供應商。 1000.第二類是針對價格低於1500且大於1000且價格大於1500的供應商,進入第三類。 目前,我僅將價格與maxp及其適用於我的產品進行比較。
我用於與maxp比較的查詢是
SELECT xid from Table1,Table2 WHERE
Table1.xid=Table2.Yid
AND category='venue'
AND subcat='Resort'
AND maxp<=1000
我得到的輸出是
xid
1
7
現在我想將價格與minp和maxp進行比較,我想計算並獲取所有xid,其中minp或maxp中的任何一個小於1000,介於1000到1500之間,大於1500。
期望的輸出低於Rs。 1000
xid
1
2
6
7
期望輸出超過盧比。 1000且小於等於1500
xid
2
3
4
8
注意:由於某些原因,我不能將minp和maxp的數據類型從varchar更改為int或long,如果minp為空也無法與之比較。
提前致謝...
您需要根據預期結果在兩個列中都進行檢入。
SELECT xid
from Table1
INNER JOIN Table2
ON Table1.xid=Table2.Yid
Where category='venue'
AND subcat='Resort'
AND (minp<=1000 or minp<=1000)
and minp <> ''
要找到盧比。 1000且小於等於1500
SELECT xid
from Table1
INNER JOIN Table2
ON Table1.xid=Table2.Yid
Where category='venue'
AND subcat='Resort'
AND (minp > 1000 or maxp > 1000) and (minp <= 1500 or maxp <= 1500)
and minp <> ''
注意:開始使用INNER JOIN
語法,而不是舊式逗號分隔的INNER JOIN
我認為您可以使用以下方式:
SELECT xid , CATEGORY, SUBCAT, minp, maxp
, CASE WHEN COALESCE(minp,0)<=1000 OR COALESCE(maxp,0)<=1000 THEN 1 ELSE 0 END AS CAT1
, CASE WHEN (COALESCE(minp,0)>1000 AND COALESCE(minp,0)<=1500) OR (COALESCE(maxp,0)>1000 AND COALESCE(maxp,0)<=1500) THEN 1 ELSE 0 END AS CAT2
, CASE WHEN COALESCE(minp,0)>1500 OR COALESCE(maxp,0)>1500 THEN 1 ELSE 0 END AS CAT3
from Table1 A
INNER JOIN Table2 B ON A.xid=B.Yid
;
輸出:
xid CATEGORY SUBCAT minp maxp CAT1 CAT2 CAT3
1 Venue Resort 800 1000 1 0 0
2 Venue Resort 900 1200 1 1 0
3 Venue Resort NULL 1100 1 1 0
4 Venue Resort 1300 1600 0 1 1
5 Venue Resort NULL 1800 1 0 1
6 Venue Resort 800 2000 1 0 1
7 Venue BanquetH 800 1000 1 0 0
8 Venue Resort 1500 2100 0 1 1
9 Apparel Designer 15000 60000 0 0 1
要為每個類別添加計數,您可以使用:
SELECT *
FROM
(SELECT xid , CATEGORY, SUBCAT, minp, maxp
, CASE WHEN COALESCE(minp,0)<=1000 OR COALESCE(maxp,0)<=1000 THEN 1 ELSE 0 END AS CAT1
, CASE WHEN (COALESCE(minp,0)>1000 AND COALESCE(minp,0)<=1500) OR (COALESCE(maxp,0)>1000 AND COALESCE(maxp,0)<=1500) THEN 1 ELSE 0 END AS CAT2
, CASE WHEN COALESCE(minp,0)>1500 OR COALESCE(maxp,0)>1500 THEN 1 ELSE 0 END AS CAT3
from Table1 A
INNER JOIN Table2 B ON A.xid=B.Yid ) X
CROSS JOIN (SELECT SUM(CASE WHEN CAT1=1 THEN 1 ELSE 0 END) AS CAT1_RC
,SUM(CASE WHEN CAT2=1 THEN 1 ELSE 0 END) AS CAT2_RC
, SUM(CASE WHEN CAT3=1 THEN 1 ELSE 0 END) AS CAT3_RC
FROM (SELECT xid , CATEGORY, SUBCAT, minp, maxp
, CASE WHEN COALESCE(minp,0)<=1000 OR COALESCE(maxp,0)<=1000 THEN 1 ELSE 0 END AS CAT1
, CASE WHEN (COALESCE(minp,0)>1000 AND COALESCE(minp,0)<=1500) OR (COALESCE(maxp,0)>1000 AND COALESCE(maxp,0)<=1500) THEN 1 ELSE 0 END AS CAT2
, CASE WHEN COALESCE(minp,0)>1500 OR COALESCE(maxp,0)>1500 THEN 1 ELSE 0 END AS CAT3
from Table1 A
INNER JOIN Table2 B ON A.xid=B.Yid) X1
) Y
;
輸出:
+-----+----------+-----------+-------+-------+------+------+------+---------+---------+---------+
| xid | CATEGORY | SUBCAT | minp | maxp | CAT1 | CAT2 | CAT3 | CAT1_RC | CAT2_RC | CAT3_RC |
+-----+----------+-----------+-------+-------+------+------+------+---------+---------+---------+
| 1 | Venue | Resort | 800 | 1000 | 1 | 0 | 0 | 6 | 4 | 5 |
| 2 | Venue | Resort | 900 | 1200 | 1 | 1 | 0 | 6 | 4 | 5 |
| 3 | Venue | Resort | NULL | 1100 | 1 | 1 | 0 | 6 | 4 | 5 |
| 4 | Venue | Resort | 1300 | 1600 | 0 | 1 | 1 | 6 | 4 | 5 |
| 5 | Venue | Resort | NULL | 1800 | 1 | 0 | 1 | 6 | 4 | 5 |
| 6 | Venue | Resort | 800 | 2000 | 1 | 0 | 1 | 6 | 4 | 5 |
| 7 | Venue | Banquet H | 800 | 1000 | 1 | 0 | 0 | 6 | 4 | 5 |
| 8 | Venue | Resort | 1500 | 2100 | 0 | 1 | 1 | 6 | 4 | 5 |
| 9 | Apparel | Designer | 15000 | 60000 | 0 | 0 | 1 | 6 | 4 | 5 |
+-----+----------+-----------+-------+-------+------+------+------+---------+---------+---------+
我認為您需要嘗試一下。
1.您想將價格與minp和maxp進行比較,我想計算並獲取所有xid,其中minp或maxp中的任何一個小於1000,介於1000到1500之間,大於1500。
從表1 t1,表2 t2中選擇t1.xid,其中t1.xid = t2.Yid AND t1.category ='venue'AND t1.subcat ='Resort'AND(t2.maxp <= 1000或t2.minp <= 1000)
從表1 t1,表2 t2中選擇t1.xid,其中t1.xid = t2.Yid AND t1.category ='venue'AND t1.subcat ='Resort'AND(((t2.maxp> = 1000和t2.maxp <= 1500 )或(t2.minp> = 1000和t2.minp <= 1500)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.