473,785 Members | 2,575 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

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 2050
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
"windandwav es" <wi*********@co ldmail.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
"windandwav es" <wi*********@co ldmail.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
3435
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 new values are updated in all corresponding tables (the function of the pages in question). However, on the page that does the DB update, I also want to do some checks on the data before performing the update. Now, the problem that I am...
29
2477
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" for when and how to use single quotes and double quotes in ASP? thanks! ---------------------- SQL = SQL & "WHERE '" & REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE("GenKTitles.
9
3137
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 SUBSTRING(ProductName, 1, CHARINDEX('(', ProductName)-2). I can get this result, but I had to use several views (totally inefficient). I think this can be done in one efficient/fast query, but I can't think of one. In the case that one query is not...
3
5395
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 there is a sample file called Ixtrasp.asp, but I could not find it in my system although I installed indexing service. I followed the steps in MSDN site to create a basic .asp query form (too long to post it here), but it always displays: No...
4
2155
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 over the years. The idea is that from any widget in the database you can look forward and backward to see different versions of the widget through the years. Here are the tables: WIDGETS widget_id name
14
3900
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. My insert would look something like:
0
3517
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 boxes do not necessarily need to have a selection made to be used in the dynamic query. In essence the form can have selections made in all or none of its list boxes to form the dynamic query I am looking to get some feedback in reference to...
6
4849
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 SalesManName AT Alan Time
4
3134
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 might be able to accomplish the results in two steps by using two queries. If this is possible how can I do it? Thank you, Stan Hanna
6
4406
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 field between them. The join field in both tables are indexed and I'm selecting 1 field from each table to lookup. The Access query is taking more than 60 second to retrieve 1 record and if I execute the same query within the Query Analyzer, it...
0
10148
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
10091
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
9950
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
8972
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
0
6740
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5381
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
0
5511
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
2
3646
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
2879
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

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.