Re: how do i retrieve distinct rows using IN

2003-01-16 Thread Keith C. Ivey
On 15 Jan 2003, at 20:13, Ken Easson wrote:

 SELECT DISTINCT price FROM sys_bld_foo WHERE catNum IN 
 ('item1', 'partA', 'partB', 'partB');

It's possible that the query you want is

   SELECT DISTINCT catNum, price FROM sys_bld_foo
   WHERE catNum IN ('item1', 'partA', 'partB', 'partB');

or

   SELECT catNum, MAX(price) FROM sys_bld_foo
   WHERE catNum IN ('item1', 'partA', 'partB', 'partB')
   GROUP BY catNum;

Maybe MAX() in the second one should be MIN() or AVG(), or maybe it 
doesn't matter.  I still don't understand why your table repeats the 
price each time a catNum appears (rather than having a separate table 
of parts, or whatever the catNum represents, that includes the price 
and other data for each), nor why you say that normalizing would 
require 20 new tables.  But if you don't want to normalize, good 
luck!

-- 
Keith C. Ivey [EMAIL PROTECTED]
Tobacco Documents Online
http://tobaccodocuments.org
Phone 202-667-6653

-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




how do i retrieve distinct rows using IN

2003-01-15 Thread Ken Easson
hello,

I have a list of things ('item1', 'partA', 'partB', 'partB')
which relate to catNum items in a table sys_bld_foo.

table sys_bld_foo:
component:  varchar 16
catNum: varchar 16
price: decimal (10,2)

i want to return 1 row for each item:
when i use:
SELECT DISTINCT price FROM sys_bld_foo WHERE catNum IN ('item1', 'partA', 'partB', 
'partB');

my return value ignores the second partB - and my price is short.

when i use:
SELECT price FROM sys_bld_foo WHERE catNum IN ('item1', 'partA', 'partB', 'partB');

my return value doubles up on partA and partB - and my price is too much.

here is a sample database to see where the problem lies:
component | item |  price
-
foo| item1   |  200.00
foo | item2   | 300.00
primary bar | partA   |   75.00
primary bar | partB   | 150.50 
second bar | partA|  75.00
second bar | partB   |  150.50
second bar | partC| 160.00

currently i am using perl to remove the second partB, create a hash $catNum{partB} = 
2, and then for each item returned, check the hash and multiple the price by it's 
results. This seems extremely slow if my problem can be solved in sql alone.
can anyone help?

ken easson
justken.net
[EMAIL PROTECTED]
justken web programming and technical support. 


-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Re: how do i retrieve distinct rows using IN

2003-01-15 Thread gerald_clark
SELECT SUM( price ) from sys_bld_foo where catNum IN ('item1', 'partA', 
'partB') group by catNum;

Ken Easson wrote:

hello,

I have a list of things ('item1', 'partA', 'partB', 'partB')
which relate to catNum items in a table sys_bld_foo.

table sys_bld_foo:
component:  varchar 16
catNum: varchar 16
price: decimal (10,2)

i want to return 1 row for each item:
when i use:
SELECT DISTINCT price FROM sys_bld_foo WHERE catNum IN ('item1', 'partA', 'partB', 'partB');

my return value ignores the second partB - and my price is short.

when i use:
SELECT price FROM sys_bld_foo WHERE catNum IN ('item1', 'partA', 'partB', 'partB');

my return value doubles up on partA and partB - and my price is too much.

here is a sample database to see where the problem lies:
component | item |  price
-
foo| item1   |  200.00
foo | item2   | 300.00
primary bar | partA   |   75.00
primary bar | partB   | 150.50 
second bar | partA|  75.00
second bar | partB   |  150.50
second bar | partC| 160.00

currently i am using perl to remove the second partB, create a hash $catNum{partB} = 2, and then for each item returned, check the hash and multiple the price by it's results. This seems extremely slow if my problem can be solved in sql alone.
can anyone help?

ken easson
justken.net
[EMAIL PROTECTED]
justken web programming and technical support. 


-
Before posting, please check:
  http://www.mysql.com/manual.php   (the manual)
  http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php


 




-
Before posting, please check:
  http://www.mysql.com/manual.php   (the manual)
  http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Re: how do i retrieve distinct rows using IN

2003-01-15 Thread Brian Lindner
SELECT DISTINCT price FROM sys_bld_foo WHERE catNum IN 
('item1', 'partA', 'partB', 'partB');

is a valid SQL statement from all i can see


my return value ignores the second partB - and my price is short.
i dont understand what you mean by 'short'


you comment that if you remove the DISTINCE that it 'doubles up' the partA and 
partB data... yes correct.. that is how your data in the database is.  
multiple rows for 150.50 price

i think you have your items and parts (of items) in the same table and that 
generally is a bad idea..  from your data i would say you have 7 items in your 
table... OR 7 parts  but i think you are trying to say you have 2 items, 
with parts for them maybe??   

What is the problem, the business problem you are trying to solve? or what do 
you need from your data?  i think you are just querieng for the wrong 
information .. but since i dont know what you are trying to do, i cant say 
more right now. 
Id need more information..

Brian Lindner



-- Original Message -
Subject: how do i retrieve distinct rows using IN
Date: Wed, 15 Jan 2003 15:12:37 -0400
From: Ken Easson [EMAIL PROTECTED]
To: [EMAIL PROTECTED]


hello,

I have a list of things ('item1', 'partA', 'partB', 'partB')
which relate to catNum items in a table sys_bld_foo.

table sys_bld_foo:
component:  varchar 16
catNum: varchar 16
price: decimal (10,2)

i want to return 1 row for each item:
when i use:
SELECT DISTINCT price FROM sys_bld_foo WHERE catNum IN 
('item1', 'partA', 'partB', 'partB');

my return value ignores the second partB - and my price is short.

when i use:
SELECT price FROM sys_bld_foo WHERE catNum IN 
('item1', 'partA', 'partB', 'partB');

my return value doubles up on partA and partB - and my price is too much.

here is a sample database to see where the problem lies:
component | item |  price
-
foo| item1   |  200.00
foo | item2   | 300.00
primary bar | partA   |   75.00
primary bar | partB   | 150.50 
second bar | partA|  75.00
second bar | partB   |  150.50
second bar | partC| 160.00

currently i am using perl to remove the second partB, create a hash $catNum
{partB} = 2, and then for each item returned, check the hash and multiple the 
price by it's results. This seems extremely slow if my problem can be solved 
in sql alone.
can anyone help?

ken easson
justken.net
[EMAIL PROTECTED]
justken web programming and technical support. 


-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail mysql-unsubscribe-
[EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php






-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Re: how do i retrieve distinct rows using IN

2003-01-15 Thread Ken Easson
hello,

SELECT DISTINCT price FROM sys_bld_foo WHERE catNum IN 
('item1', 'partA', 'partB', 'partB');

problem --|--|
partB is duplicated in the IN list. i need IN to find a DISTINCT price for EACH 
element in the list.

Gerald's solution i think gives me the same incorrect sum that i get when i sum the 
results outside of mysql, but i do like the idea, if there is an sql that will 
generate the correct result set, i will use the SUM - save me some of code.

my database includes the general category a part falls into - monitor, cpu, 
motherboard, hard drive etc.
and then the catalog code (catNum); amd 2.8Gh processor, intel 3.0Ghz processor etc. 
normalizing the category column results in about 20 tables, each with about 6 items 
each, which i think is a classic example of over-normalization, also, virtually every 
call to the database will retrieve 1 or more parts from each category, again 
normalization would create a terrific slowdown in the search, and overcomplicate my 
database.

my primary key is a combination of both the component, and the category number. This 
is to allow each component to have none as a valid catNum.

however what i hadn't taken into consideration is that some computers have 2 identical 
hard drives. which is were my particular problem lies, there are two components 
'primary hard drive', and 'secondary hard drive', with virtually the same list of 
catNum's, and if a user only selects one hard drive, the catNum IN (hardDrive1) return 
the price for the hard drive in primary hard drive, and secondary hard drive, or 
effectively doubling the price of that component.
To solve this problem i used the DISTINCT keyword, however now when we build a system 
with two identical hard drives, (hardDrive 1, hardDrive 1) the system see this as a 
duplicate record and ignores the second hard drive, again the incorrect sum of the 
price.
Yes i know it's ugly from a clean database structure, but having only one set of hard 
drives, but doubling them up in the actually program again makes everything else much 
more complicated.

What i am looking for is something like this:

foreach (hardDrive1, hardDrive1, monitorA, CPUA, VideoCardD)
SELECT price FROM sys_comp WHERE catNum = $_
}

hope that makes it clearer what i am trying to accomplish.


At 09:56 PM 1/15/2003 +, you wrote:
SELECT DISTINCT price FROM sys_bld_foo WHERE catNum IN 
('item1', 'partA', 'partB', 'partB');

is a valid SQL statement from all i can see


my return value ignores the second partB - and my price is short.
i dont understand what you mean by 'short'


you comment that if you remove the DISTINCE that it 'doubles up' the partA and 
partB data... yes correct.. that is how your data in the database is.  
multiple rows for 150.50 price

i think you have your items and parts (of items) in the same table and that 
generally is a bad idea..  from your data i would say you have 7 items in your 
table... OR 7 parts  but i think you are trying to say you have 2 items, 
with parts for them maybe??   

What is the problem, the business problem you are trying to solve? or what do 
you need from your data?  i think you are just querieng for the wrong 
information .. but since i dont know what you are trying to do, i cant say 
more right now. 
Id need more information..

Brian Lindner



-- Original Message -
Subject: how do i retrieve distinct rows using IN
Date: Wed, 15 Jan 2003 15:12:37 -0400
From: Ken Easson [EMAIL PROTECTED]
To: [EMAIL PROTECTED]


hello,

I have a list of things ('item1', 'partA', 'partB', 'partB')
which relate to catNum items in a table sys_bld_foo.

table sys_bld_foo:
component:  varchar 16
catNum: varchar 16
price: decimal (10,2)

i want to return 1 row for each item:
when i use:
SELECT DISTINCT price FROM sys_bld_foo WHERE catNum IN 
('item1', 'partA', 'partB', 'partB');

my return value ignores the second partB - and my price is short.

when i use:
SELECT price FROM sys_bld_foo WHERE catNum IN 
('item1', 'partA', 'partB', 'partB');

my return value doubles up on partA and partB - and my price is too much.

here is a sample database to see where the problem lies:
component | item |  price
-
foo| item1   |  200.00
foo | item2   | 300.00
primary bar | partA   |   75.00
primary bar | partB   | 150.50 
second bar | partA|  75.00
second bar | partB   |  150.50
second bar | partC| 160.00

currently i am using perl to remove the second partB, create a hash $catNum
{partB} = 2, and then for each item returned, check the hash and multiple the 
price by it's results. This seems extremely slow if my problem can be solved 
in sql alone.
can anyone help?

ken easson
justken.net
[EMAIL PROTECTED]
justken web programming and technical support. 


-
Before