Skip to main content

جمع زدن یک ستون با مقدار خاص در mysql

سلام . امروز میخوام در مورد یکی از دستورهای mysql صحبت کنم این دستور مثل دستور ساده IF رفتار میکنه با این شرایط که اگر ستون مورد نظر برابر مقدار خاصی شد سپس بتواند جمع آن مقدار خاص را بدست بیاورد

[sql]
SUM(IF(t7.code = ‘pay’, t4.amount, 0)) AS ‘pay’,
SUM(IF(t7.code = ‘rec’, t4.amount, 0)) AS ‘rec’

SUM(CASE WHEN t7.code = ‘pay’ THEN t4.amount ELSE -t4.amount END) AS amount33
[/sql]

ایجاد کلید بین دو جدول موجود در mysql

با دستور زیر میتوان بین دو جدول کلید خارجی تعریف کرد با این حالت که اگر منبع پاک شد مقادیر جدول NULL شود در صورت آپدیت Update شود

[sql]
ALTER TABLE user ADD CONSTRAINT bank_id_relation FOREIGN KEY (bank_id) REFERENCES accounting_banks (id)
ON DELETE SET NULL ON UPDATE CASCADE;
[/sql]

استفاده از دستور Union در Mysql

گاهی اوقات ساختار دیتابیس باید بصورتی باشد که یک سری اطلاعات در 2 یا چند جدول ذخیره شده و حالا میخواهیم گزارشی از یک عبارت بگیرم .

به نظر من یکی از کاربردهای این دستور در جستجو در جدول های آرشیو است .

[sql]
SELECT name,price FROM tb1 a

where a.name = "vahid"

UNION
SELECT name,price FROM tb2 b

where b.name = "vahid"
[/sql]

دستور فوق شما عبارت vahid را در 2 جدول نمایش می دهد و حاصل آن را در هر 2 جدول نمایش می دهد .

نکاتی در مورد union :

1- باید موارد Select شده در هر دو Select یکسان باشد مثلا من در مثال فوق 2 فیلد name,price را انتخاب کرده ام

2- فیلد های انتخاب شده باید از یک نوع باشد

3-شما نمی توانید جستجو را بر اساس یک فیلد که در یکی از جدول ها وجود ندارد بدست آورید باید آن فیلد که در where قرار میگیرد در هر 2 جدول به صورت منطقی وجود داشته باشد

4- شما به جای union میتوانید از union all نیز استفاده کنید اما استفاده از union all موارد تکراری را که برابر فیلد Where میباشد را حذف میکند.

 

مثلا اگر در جدول  اول مقدار name = vahid , price =2000  باشد و در جدول دوم name = vahid , price =1000 باشد تنها مقدار جدول اول که معادلSelect  اول میباشد را نمایش میدهد.

 

فرض کنید میخواهید نتایج هر 2 جدول را در هم ادغام کنید مثال فوق که اجرا میشود نتیجه زیر را نمایش میدهد

vahid  —- 1000

vahid —- 2000

 

اگر شما بخواهید هر جمع حاصل هر 2 جدول را نمایش بدهد باید آنها را در یک Sub query قرار دهید

[sql]
SELECT

sum(t.ss) from

(

SELECT name,sum(price) as ss FROM tb1 a

where a.name = "vahid"

UNION
SELECT name,sum(price) as ss FROM tb2 b

where b.name = "vahid"
) t
[/sql]

 

توضیح برنامه فوق این است که دو Select موجود در Subquery جمع نتایج خود را بدست آوردند و سپس در متفیر ss قرار دادند در داخل Subquery ما همان برنامه قبل را نوشتیم اما حالا میخواهیم جمع نتایج هر 2 جدول را جمع بزنیم . مقدار t حامل همان نتایج قبل است و آن را به عنوان یک جدول فرض می بیند وقتی که ما در Select اصلی که در ابتدای برنامه قرار دارد sum(t.ss) را وارد میکنیم جمع 2 نتیجه را یکی میکند و حاصل مقدار زیر است

vahid  —- 3000

 

انتخاب کمترین رکورد در mysql

Select min Rows in mysql Group by userid

سلام . روز بخیر. فرض کنید هر مشتری مبالغ مختلفی خرید داشته است در دیتابیس userid را به همراه مبالغ مختلف خرید او ذخیره کرده ایم حالا میخواهیم کمترین خرید هر مشتری را بدست آوریم

[sql]
CREATE TABLE `order` (
`id` int(11) NOT NULL,
`userid` int(11) NOT NULL,
`price` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `order` (`id`, `userid`, `price`) VALUES
(3, 1, 100),
(4, 1, 200),
(5, 3, 100),
(6, 3, 600);

[/sql]

حالا فرض کنید کاربر شماره 1 و 3 هر دو 2 خرید داشته اند ما میخواهیم هر کاربر تفکیک شود و کمترین خرید را برای او نمایش دهد

[sql]
SELECT a.id,a.userid,price FROM `order` a

INNER JOIN
(
SELECT t.userid , MIN(t.price) AS miin
FROM `order` t
GROUP BY userid
) b ON b.miin = a.price and b.userid = a.userid
[/sql]

 

نتیجه

id —|—userid—-|—price

3     |     1        |     100

5     |     3        |     100

 https://sqlfiddle.com/#!9/c9bad/2

 

 

 

inner join در یک subquery در mysql

سلام ، مدتیه که برای اجرای پروژه ای تجزیه و تحلیل دیتا شدیدا به query های پیچیده mysql  احتیاج داشتم . یکی از کاربردی ترین بخش ها موضوع subquery است که در مثال زیر نتیجه هر 2 query زیر یکسان است

یک نکته که در مورد subquery وجود دارد این است که ابتدا subquery اجرا میشود

[sql]

SELECT buy.userid, t.userid FROM user_buys buy

inner join (
select t1.userid
from user_buys t1

)t on t.userid = buy.userid

[/sql]

برنامه فوق معادل برنامه زیر است

[sql]

SELECT buy.userid, t.userid FROM user_buys buy

inner join user_buys t on t.userid = buy.userid
[/sql]

 

در استفاده از subquery ها شما نمیتوانید متغیری را از query اصلی را دریافت کنید چرا که اول subquery اجرا میشود