473,320 Members | 2,111 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,320 software developers and data experts.

query in a query

Hi Folk

I have a query:

SELECT COUNT( `SIS`.`ID` ) c, D
FROM `SIS` , `SID`
WHERE `SID_ID` = `SID`.`ID`
AND `BRO` <> "bot"
GROUP BY SID.ID

And from the results, I want to select the following:

SELECT AVG(c), D FROM RESULTS GROUP BY D

Can I do this in one sql statement? Or do I need to create a temporary
table?

TIA
Nicolaas

Feb 20 '06 #1
6 2030
windandwaves wrote:
Hi Folk

I have a query:

SELECT COUNT( `SIS`.`ID` ) c, D
FROM `SIS` , `SID`
WHERE `SID_ID` = `SID`.`ID`
AND `BRO` <> "bot"
GROUP BY SID.ID

And from the results, I want to select the following:

SELECT AVG(c), D FROM RESULTS GROUP BY D

Can I do this in one sql statement? Or do I need to create a temporary
table?

TIA

Nicolaas



why are you enclosing everything in quotes...

SELECT COUNT( SIS.ID ) c, sid.D d
FROM SIS , SID
WHERE SIS.ID = SID.ID
AND SIS.BRO <> 'bot' -- SID.BRO??
GROUP BY SID.ID
--
Michael Austin.
DBA Consultant
Donations welcomed. Http://www.firstdbasource.com/donations.html
:)
Feb 20 '06 #2
Michael Austin wrote:
why are you enclosing everything in quotes...
I like to have good habits and a while ago I decided to stick with one way
of writing all my queries.

For example, if I had 100 php pages and I wanted to find any field called
BRO so that I could change it to BOT, then I could just do a search for
`BRO`. While otherwise words like browser would also show up (ignoring upper
and lower case in this example).

Do you know the answer to my question by any chance?

TIA
Nicolaas

Feb 20 '06 #3
"windandwaves" <wi*********@coldmail.com> wrote in message
news:G5**********************@news.xtra.co.nz...
I like to have good habits and a while ago I decided to stick with one way
of writing all my queries.


I'd suggest the following additional habits:

1. Use the delimited identifiers consistently if you use them at all.
2. Use table aliases.
3. List the table alias prefix for all fields in all clauses of the query,
to make it more clear in which table each column is found.
4. Use the JOIN syntax instead of SQL-89 join style. If you do, your goal
of one way of writing queries will be easier to achieve when you start using
outer joins.
5. Avoid naming columns "ID". It's more clear to use SIS_ID and SID_ID for
both referenced and referencer of a given column.
6. You might want to read Joe Celko's book "SQL Programming Style" if good
habits and consistent style are important to you.

It's hard to analyze your query to suggest another syntax, because I can't
tell for certain which table D and BRO belong to. I can infer that SID
includes columns ID and D, while SIS probably includes columns ID, SID_ID,
and BRO. Please post a clear description of your schema when you post
questions to newsgroups. The best description is a dump of the CREATE TABLE
statements to create the schema, including referential integrity
constraints.

Your desired query computes the average per D count of SIS's per ID.
(So in other words, if SID is an order, and SIS is a line-item in an order,
and D is a department submitting orders within the organization, you want
the average number of line-items in an order, per department.)

The groupings applied by GROUP BY apply to all aggregate functions in that
query. So you need to do the two calculations in separate queries. Either
store the count per SIS.ID in a temp table, or else feed it to the average
calculation by use of a subquery in a derived view:

SELECT AVG(R.`C`) AS Avg, R.`D`
FROM (
SELECT COUNT( S.`ID` ) AS C, D.`D`
FROM `SIS` AS S INNER JOIN `SID` AS D ON S.`SID_ID` = D.`ID`
WHERE S.`BRO` <> 'bot'
GROUP BY D.`ID`
) AS R
GROUP BY R.`D`

Regards,
Bill K.
Feb 20 '06 #4
Bill Karwin wrote:

Thank you for your reply and all the information! Great.
news:G5**********************@news.xtra.co.nz...
I like to have good habits and a while ago I decided to stick with
one way of writing all my queries.
I'd suggest the following additional habits:

1. Use the delimited identifiers consistently if you use them at all.


usually do - try to anyway
2. Use table aliases.
what is the joy of that?
3. List the table alias prefix for all fields in all clauses of the
query, to make it more clear in which table each column is found.
4. Use the JOIN syntax instead of SQL-89 join style. If you do, your
goal of one way of writing queries will be easier to achieve when you
start using outer joins.
lol - I thought that SQL-89 was a joke - as in super archaic, ... but I
googled it and it exists! Is join faster? I just always find it a bit
confusing, inner join, outer join, left join, etc.. i have used it and I can
work it out, but it seems more work.
5. Avoid naming columns "ID". It's more clear to use SIS_ID and
SID_ID for both referenced and referencer of a given column.
Old habits die hard!
6. You might want to read Joe Celko's book "SQL Programming Style" if
good habits and consistent style are important to you.
Lots to learn!
It's hard to analyze your query to suggest another syntax, because I
can't tell for certain which table D and BRO belong to. I can infer
that SID includes columns ID and D, while SIS probably includes
columns ID, SID_ID, and BRO. Please post a clear description of your
schema when you post questions to newsgroups. The best description
is a dump of the CREATE TABLE statements to create the schema,
including referential integrity constraints.

Your desired query computes the average per D count of SIS's per ID.
(So in other words, if SID is an order, and SIS is a line-item in an
order, and D is a department submitting orders within the
organization, you want the average number of line-items in an order,
per department.)
Yes, it actually measures the average number of searches (SIS) carried out
per user (SID) per month (D).
The groupings applied by GROUP BY apply to all aggregate functions in
that query. So you need to do the two calculations in separate
queries. Either store the count per SIS.ID in a temp table
I thought about that, the reason I did not do it is when lots of people
access the data at the same time then this may create a bit of a mess.

, or else feed it to the average calculation by use of a subquery in a derived
view:
SELECT AVG(R.`C`) AS Avg, R.`D`
FROM (
SELECT COUNT( S.`ID` ) AS C, D.`D`
FROM `SIS` AS S INNER JOIN `SID` AS D ON S.`SID_ID` = D.`ID`
WHERE S.`BRO` <> 'bot'
GROUP BY D.`ID`
) AS R
GROUP BY R.`D`
I tried it - this is what I got as error.

SELECT AVG( R.`C` ) AS Avg, R.`M` AS
MONTH FROM (

SELECT COUNT( S.`ID` ) AS C, D.`NOW` AS M
FROM `SIS` AS S
INNER JOIN `SID` AS D ON S.`SID_ID` = D.`ID`
WHERE D.`BRO` & lt ; & gt;

'bot' GROUP BY D.`ID`
) AS R GROUP BY R.`M` LIMIT 0 , 30
MySQL said:
#1064 - You have an error in your SQL syntax. Check the manual that
corresponds to your MySQL server version for the right syntax to use near
'SELECT COUNT( S . `ID` ) AS C , D . `NOW` AS M FROM `SIS` AS S

I am running version 4.0.18-standard, reading the MySql manual, it seems
that I may be out of luck.

Regards,
Bill K.

Feb 20 '06 #5
"windandwaves" <wi*********@coldmail.com> wrote in message
news:mg**********************@news.xtra.co.nz...
2. Use table aliases.
what is the joy of that?


Try writing a reflexive join without using table aliases.
lol - I thought that SQL-89 was a joke - as in super archaic, ... but I
googled it and it exists! Is join faster?
SQL-89 was a published ANSI standard, which included much of the SQL syntax
we use today. SQL-92 introduced the JOIN syntax, which enable some types of
joins that were not possible with the "FROM a, b WHERE a.id = b.id" syntax.

The two syntax forms should be more or less equivalent in performance,
because the RDBMS converts both forms into an internal representation before
actually executing the query. But you simply cannot do some types of JOINs
using the older syntax.
I just always find it a bit confusing, inner join, outer join, left join,
etc.. i have used it and I can work it out, but it seems more work.
You said you want to use one way to write all your queries. You probably
will have a need for outer joins someday, so you better get used to the JOIN
syntax and start using that consistently.
Old habits die hard!
Well, you were the one who said you wanted to have good habits. Choose one
or the other: either adopt good habits, or have bad habits that die hard.

I don't mean to be clubbing you on the head over this, but if you talk the
talk, you've got to walk the walk! :-)
I am running version 4.0.18-standard, reading the MySql manual, it seems
that I may be out of luck.


Right. MySQL 4.1 is required in order to do subqueries.

Regards,
Bill K.
Feb 20 '06 #6
Bill Karwin wrote:

snip snip..... see earlier posts

THANK YOU SO MUCH.

Much appreciated your help Bill. I am a bit of a tyre kicker without formal
IT education or anything like that, but with the intention to become a world
leading web developer.

I will start joining from now on ;-)

Nicolaas
Feb 20 '06 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
by: jaysonsch | last post by:
Hello! I am having some problems with a database query that I am trying to do. I am trying to develop a way to search a database for an entry and then edit the existing values. Upon submit, the...
29
by: shank | last post by:
1) I'm getting this error: Syntax error (missing operator) in query expression on the below statement. Can I get some advice. 2) I searched ASPFAQ and came up blank. Where can find the "rules"...
9
by: netpurpose | last post by:
I need to extract data from this table to find the lowest prices of each product as of today. The product will be listed/grouped by the name only, discarding the product code - I use...
3
by: Harvey | last post by:
Hi, I try to write an asp query form that lets client search any text-string and display all pages in my web server that contain the text. I have IIS 6.0 on a server 2003. The MSDN site says...
4
by: Diamondback | last post by:
I have two tables, WIDGETS and VERSIONS. The WIDGETS table has descriptive information about the widgets while the VERSIONS table contains IDs relating to different iterations of those widgets...
14
by: Dave Thomas | last post by:
If I have a table set up like this: Name | VARCHAR Email | VARCHAR Age | TINYINT | NULL (Default: NULL) And I want the user to enter his or her name, email, and age - but AGE is optional. ...
0
by: starace | last post by:
I have designed a form that has 5 different list boxes where the selections within each are used as criteria in building a dynamic query. Some boxes are set for multiple selections but these list...
6
by: jjturon | last post by:
Can anyone help me?? I am trying to pass a Select Query variable to a table using Dlookup and return the value to same select query but to another field. Ex. SalesManID ...
4
by: Stan | last post by:
I am using MS Office Access 2003 (11.5614). My basic question is can I run a query of a query datasheet. I want to use more that one criteria and can not get that query to work. I thought I...
6
by: jsacrey | last post by:
Hey everybody, got a secnario for ya that I need a bit of help with. Access 97 using linked tables from an SQL Server 2000 machine. I've created a simple query using two tables joined by one...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
1
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
1
by: Shællîpôpï 09 | last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.