PDA

View Full Version : دریافت اطلاعات از دو جدول با تحلیل کمی پیچیده



xengil
دوشنبه 09 اردیبهشت 1392, 23:44 عصر
سلام بنده دو تا جدول دارم و خروجی رو که میخوام پایین نوشتم میخواستم بدونم کد sql برای mysql تا اینکه بتونم این خروجی رو بگیرم چیه



products :
+----+---------------------+---------------------+
| id | start_date | end_date |
+----+---------------------+---------------------+
| 1 | 2013-04-27 00:00:00 | 2013-05-31 00:00:00 |
| 2 | 2013-04-01 00:00:00 | 2013-05-31 00:00:00 |
+----+---------------------+---------------------+

prices :
+----+------+------------------+------+-------+----------+--------+
| id | p_id | title | main | price | quantity | bought |
+----+------+------------------+------+-------+----------+--------+
| 1 | 1 | option1 product1 | 0 | 1000 | 100 | 20 |
| 2 | 1 | option2 product1 | 1 | 2000 | 30 | 25 |
| 3 | 2 | option1 product2 | 1 | 3000 | 70 | 70 |
| 4 | 2 | option2 product2 | 0 | 3000 | 50 | 40 |
+----+------+------------------+------+-------+----------+--------+

example output :
+----+------------------+-------+----------+--------+---------------+-------------+
| id | title | price | quantity | bought | sum(quantity) | sum(bought) |
+----+------------------+-------+----------+--------+---------------+-------------+
| 1 | option2 product1 | 2000 | 30 | 25 | 130 | 45 |
| 2 | option1 product2 | 3000 | 70 | 70 | 120 | 110 |
+----+------------------+-------+----------+--------+---------------+-------------+


خوب توضیحش اینه که میخوام اول product هایی رو بگیرم که که مجموع quantity هاشون بزرگتر از مجموع bought هاشون باشه دوم اینکه فقط میخوام title و price و quantity اون price ای که main ش مساوی 1 رو بگیرم

مهدی هادیان2
سه شنبه 10 اردیبهشت 1392, 06:55 صبح
بسم الله الرحمن الرحیم
با سلام

میخوام اول product هایی رو بگیرم که که مجموع quantity هاشون بزرگتر از مجموع bought هاشون باشه
SELECT Product.id,title,price,quantity,bought,SUM(quantit y),SUM(bought)
FROM Product
INNER JOIN Price
ON Product.id=P_id
WHERE SUM(quantity)>SUM(bought)


دوم اینکه فقط میخوام title و price و quantity اون price ای که main ش مساوی 1 رو بگیرم
SELECT title,price,quantity
FROM Price
WHERE main=1
موفق باشید.

xengil
سه شنبه 10 اردیبهشت 1392, 10:47 صبح
حاجی اول تست کن بعد بگو این کار نمیکنه
http://sqlfiddle.com/#!2/43a35/31 توابع Aggregate رو نمی تونی تو where اجرا کنی باید از group استفاده کنی اینو خودم میدونم مشکل اینجاست که این دو تا دستور رو باهم میخوام اجرا کنم یعنی یک query باشه

rasoul_par
سه شنبه 10 اردیبهشت 1392, 13:15 عصر
داداش اینی که تو میخوای این خروجی که گذاشتی رو نمیده!
SELECT *
FROM (
SELECT products.`id` , `title` , `main` , `price` , sum( `quantity` ) AS Qnt, sum( `bought` ) AS Bought
FROM products
LEFT JOIN prices ON products.`id` = `p_id`
GROUP BY `p_id`
HAVING sum( `quantity` ) > sum( `bought` )
) AS t
WHERE `main` =1
کدی که توی FROM هست رو میتونی جدا بزنی ببینی main چه مقادیری میگیره، بعد اگر شرط main = 1 رو اعمال کنی اونوقت فقط 1 خروجی میده